Life at 300Hz: Optimize your games to take advantage of high refresh rates
by ROGWe introduced the world’s first gaming laptops with 300Hz displays at IFA Berlin 2019, pairing an unprecedented panel refresh rate with the high-end GeForce RTX graphics processors needed to take advantage of it. Our 300Hz gaming laptops are aimed at esports gamers—especially pros who compete at a level where every millisecond matters. In that world, preempting the enemy is all about reaction time, and getting new information on screen before anyone else conveys a big tactical advantage.
A 300Hz refresh rate updates 25% faster than the 240Hz LCDs popular with competitive gamers. And the ability to draw a new frame every 3.33ms nicely matches our display’s 3ms pixel response time, keeping motion blur to an absolute minimum.
So how do you benefit from a 300Hz refresh rate? You start by tuning your games. Depending on your PC’s specs, that’s easier said than done. Fortunately, the ROG Zephyrus S GX701 is loaded with high-end hardware able to muscle through the top esports titles. To prove it, I grabbed a special 300Hz version of the GX701 with a six-core, 12-thread Intel Core i7-9750H processor, 32GB of DDR4-2666 memory, 1TB of solid-state storage, and NVIDIA’s flagship GeForce RTX 2080 GPU with 8GB of GDDR6 inside.
This version of the GX701 sacrifices nothing for its upgraded display. A factory calibration and Pantone Validated status maintain the laptop’s exceptional color reproduction, while the same 6.9mm bezels around the display translate to an 81% screen-to-body ratio. It’s the spitting image of its predecessor except for the faster panel.
To showcase what the screen can do, we installed four esports games—Counter-Strike: Global Offensive, Overwatch, Rainbow Six Siege, and Rocket League.
Getting the best performance possible from CS:GO
By no means is Counter-Strike: Global Offensive a new or modern title. It was launched back in 2012 as a successor to Counter-Strike: Source, which debuted eight years prior. Both games employ the venerable Source engine, so their graphics are understandably dated. But because Valve continues publishing updates (most recently in 2018 when it released the Danger Zone battle royale mode), CS:GO remains one of the most-played games on Steam. Of course, it probably helps that the same patch made CS:GO free-to-play. Gamers of every skill level can grab Counter-Strike and practice for competition in tournaments that run on an almost daily basis (with real prize money).
Easy access to a title enjoyed by millions means any little advantage you can secure goes a long way in improving your chances at survival. CS:GO already runs at triple-digit frame rates on many modern GPUs. When you pair cutting-edge hardware with the latest 144Hz and 240Hz panels, in-game action shows up on-screen milliseconds faster, allowing you to react before the enemy gets a shot off.
The newest version of the Zephyrus S GX701 and its 300Hz panel give you an opportunity to squeeze out even faster reaction times, so long as you get CS:GO running at high-enough frame rates. We’re here to show you how.
Step 1: Make sure you’re running at full speed
By design, laptops must balance performance and battery life, particularly on the road. But when you’re plugged into a wall outlet and gunning for maximum performance, power-saving features are far less desirable. That’s why we’re going to keep the Zephyrus S GX701 running at its peak clock rates.
In Windows 10, click the Start button, open Settings, select the System menu, and choose “Power & sleep” in the left-hand pane. On the right-hand side, click the link for “Additional power settings.” If you don’t see the High performance plan by default, choose “Show additional plans” to make it appear. On our Zephyrus S GX701 sample, this kept our Core i7-9750H running in excess of 4GHz, while our GeForce RTX 2080 held a steady 990MHz.
But wait—there's more gaming power on tap if you want it, thanks to the headroom offered by ROG Boost. Just jump into Armoury Crate and switch over to the Turbo profile. At that setting, the GX701 can push graphics frequencies as high as 1,230MHz thanks to a GPU power budget as high as 100W. Just be mindful of the fact that your system’s fans will spin up to compensate for the extra heat the GPU will produce in this mode.
Step 2: Time for a graphics tune-up
It’s a diagnostic recommendation as old as “try restarting Windows,” but installing the latest graphics drivers for your GPU is always a good idea. We like to uninstall old drivers first using the Windows control panel before running Display Driver Uninstaller in safe mode to remove any leftover remnants. Once that’s all done, you can apply the newest drivers from AMD or NVIDIA after rebooting.
Next, verify that your display is running at its highest (native) refresh rate. On the Zephyrus S GX701, that means right-clicking on the desktop, opening the NVIDIA Control Panel, and clicking “Change resolution” on the left-hand “Select a Task” pane. Sure enough, our sample was already set to 1920x1080 and 300Hz.
Achieving the highest possible frame rates means tweaking some of the GPU’s global 3D settings, too—in this case, in the NVIDIA Control Panel. The following chart, taken from Chicken Killer’s CS:GO guide, should serve as a handy reference if you’re using an NVIDIA GPU like our GeForce RTX 2080.
| Setting | Max FPS Setting | Max Competitive Advantage Setting |
|---|---|---|
| Ambient occlusion | Off | Off |
| Anisotropic filtering | Off | Off |
| Antialiasing - FXAA | Off | Off |
| Antialiasing - Gamma correction | Off | Off |
| Antialiasing - Mode | Off | Application-controlled |
| Antialiasing - Setting | Off | Application-controlled |
| Antialiasing - Transparency | Off | Multisample |
| CUDA - GPUs | All | All |
| Maximum pre-rendered frames | Use 3 if experiencing low FPS, otherwise use 1 | 1 |
| Power management mode | Prefer maximum performance | Prefer maximum performance |
| Shader cache | On or off, test both | On or off, test both |
| Texture filtering - Anisotropic sample optimization | On | On |
| Texture filtering - Negative LOD bias | Clamp | Clamp |
| Texture filtering - Quality | High performance | High performance |
| Texture filtering - Trilinear optimization | On | On |
| Threaded optimization | On | On |
| Triple buffering | Off | Off |
| Vertical sync | Off | Off |
Step 3: Getting CS:GO ready for action
The same guide recommends several launch options that can be set by right-clicking on Counter-Strike: Global Offensive in your Steam library and selecting Properties. Click the “Set Launch Options” box and paste the following string:
-novid -nojoy -noaafonts
The -novid switch isn't directly related to increasing frame rates, but it conveniently skips the Valve animation when CS:GO starts up. Adding -nojoy removes joystick support, though certain threads on the /r/GlobalOffensive subreddit suggest this no longer has an effect. The benefit of -noaafonts is also up for debate. We suggest experimenting with these tweaks to gauge whether they’re necessary. A high-end GPU like our GeForce RTX 2080 doesn’t need low-level tweaking to render more than 300 frames per second.
It took some charting of our performance results to notice that our CS:GO benchmarks averaged in the 200 FPS range with a hard cap at 300 FPS. To change that, we launched the game, opened its Game Settings menu, and checked the box for Enable Developer Console (~). We pressed the tilde key to open the console and typed fps_max 500 to raise the ceiling. After confirming higher frame rates, we set about optimizing graphics quality.
Counter-Strike offers lots of display, quality, and audio settings. When we started characterizing the game’s performance, we turned all of its details down, assuming that’s what it’d take to reach our target frame rate. But we were underestimating the platform’s potential. By the time we were done adjusting, we recorded an average frame rate of 355 FPS at 1920x1080 using High (or better) quality settings.
| Video Options - Counter-Strike: Global Offensive | |
| Color Mode | Computer Monitor |
| Brightness | 110% |
| Aspect Ratio | Widescreen 16:9 |
| Resolution | 1920x1080 |
| Display Mode | Fullscreen |
| Laptop Power Savings | Disabled |
| Advanced Video Options | |
| Global Shadow Quality | High |
| Model/Texture Detail | High |
| Effect Detail | High |
| Shader Detail | Very High |
| Multicore Rendering | Enabled |
| Multisampling Anti-Aliasing Mode | None |
| FXAA Anti-Aliasing | Disabled |
| Texture Filtering Mode | Trilinear |
| Wait for Vertical Sync | Disabled |
| Motion Blur | Disabled |
Competitive gamers don’t always want to use the most realistic options. Some settings become a disadvantage when points matter more than eye candy. For example, enabling Motion Blur affects fast crosshair movements, so you want to leave it turned off. Switching Global Shadow Quality to Low gets rid of scope blur and other distracting effects, but at the expense of shadow render distance. And enabling anti-aliasing may help resolve small details, albeit at a greater performance cost.
Now tab over to the Audio settings. Disable any of the music settings you find extraneous and make sure your Audio Device is set correctly. Stereo Headphones is the right choice for most aspiring competitive gamers. There’s an Advanced 3D Audio Processing option you may want to toy with, too. Some seasoned veterans swear it helps them pinpoint enemies in 3D space, while others prefer turning it off.
Step 4: It’s time to look at the data
Ultimately, we were able to dial in aggressive settings and still get the full benefit of our Zephyrus S GX701’s 300Hz panel at its native 1920x1080.
A handful of dips below 200 FPS and spikes in excess of 500 FPS put most of our game time in the 300-400 FPS range. Over 60 seconds of recording, that added up to more than 21,000 data points.
What’s the significance of those crazy frame rates in the context of a competitive first-person shooter? It’s all about smoothness and responsiveness. The easiest way to “feel” the effect of a 300Hz panel is to swap back and forth between its native refresh rate and 60Hz, the other setting available when you open NVIDIA’s Control Panel on our Zephyrus S GX701.
The 300Hz display fed by 300+ frames per second is silky-smooth. Running, strafing, jumping, spinning—it doesn’t matter. Every animation is crisp. There is no blur. There are no stutters or tearing artifacts as multiple frames show up in a single refresh. And there is no perceivable input lag.
Operate the same display at 60Hz with v-sync disabled, though, and CS:GO suddenly feels broken, even with NVIDIA’s GeForce RTX 2080 pumping more than 300 FPS through the graphics pipeline. Refreshing 20% as fast as the panel’s native rate just kills the perception of smoothness, even though the Zephyrus’ frame rate doesn’t change. It’s akin to gaming on a high-latency broadband connection, where characters skip around the screen with noticeable chop in their movement.
We’re adaptable creatures, so that sub-optimal experience becomes normal if it’s all you’re used to seeing. However, swapping back and forth between 300Hz and 60Hz is downright jarring, regardless of whether you consider yourself a professional or casual gamer. No wonder the first 144Hz panels were so popular. Stepping up to 240Hz is good for a 66% speed-up over those early 144Hz displays, and our 300Hz LCDs take the improvement to another level.
In CS:GO especially, the combination of a Core i7-9750H and GeForce RTX 2080 leaves plenty of headroom for applying anti-aliasing or anisotropic filtering. Our results are also good news for owners of Strix SCAR III and Zephyrus S GX502 notebooks with a GeForce RTX 2070 GPU. Both models have enough graphics horsepower to break the same 300 FPS barrier, particularly as you start relaxing some of the quality settings.
Getting the best performance possible from Overwatch
Overwatch is a much newer game than CS:GO. It debuted back in 2016 on the PC and has lots of granular graphics options for enthusiasts to adjust. But Overwatch also has to run well on the PlayStation 4, Xbox One, and Nintendo Switch. Blizzard’s proprietary game engine handles scaling from the Switch’s NVIDIA Tegra SoC to our GeForce RTX 2080 with aplomb, giving us plenty of room to optimize for a 300Hz refresh rate.
Steps 1 and 2: once again, with feeling
Prepping for a positive experience in Overwatch isn’t much different from what we did to ready our Zephyrus S GX701 for CS:GO. Again, you’ll want to configure your laptop for maximum performance. Disable power-saving features that add latency as they throttle clock rates and put certain pieces of silicon to sleep. We used the Armoury Crate application, which is mapped to the ROG logo key above our sample’s trackpad, and specified the Turbo profile.
Next, we double-checked that NVIDIA hadn’t released new drivers for our GeForce RTX 2080, verified that our monitor settings were still set to 1920x1080 and 300Hz, and made sure that the options under Manage 3D settings in NVIDIA Control Panel were unchanged.
Easy enough, right? It’s time to get Overwatch ready for some incredibly smooth frame rates.
Step 3: Tuning Overwatch for maximum performance
Anticipating that a newer game would be more demanding, and consequently run at lower frame rates than CS:GO, we started probing performance in Overwatch with its Graphics Quality preset at Low. We expanded the Advanced menu and manually specified a 100% Render Scale. We also changed the Limit FPS drop-down menu to Custom and set its Frame Rate Cap slider to 300. All those changes required restarting Overwatch, so we closed the game completely for this next step.
Obviously, a 300 FPS ceiling isn’t ideal for going above and beyond the GX701’s 300Hz refresh rate. And that cap is as high as the game goes by default. But if you navigate over to your Documents\Overwatch\Settings\ folder and open the Settings_v0.ini file using Notepad, you’ll see a [Render.13] header. Paste FrameRateCap = "400" under that header. Or, if FrameRateCap already exists, change its value to 400. Beware, though: every time you open the Video pane in Overwatch’s Options menu, you’ll have to reset that FrameRateCap flag, else it’ll revert to 300. Save the file, close it, and start Overwatch back up again.
In the case of our Zephyrus S GX701, one test run after another returned frame rates pegged at 400 FPS, so we knew we had room to dial in better-looking details. And since the Medium-quality global preset gave us the same 400 FPS, we pushed the Graphics Quality drop-down to High. An average of 333 FPS was great for what we wanted to see, though it’d be perfectly understandable if you wanted to stay with Medium for higher performance.
| Video Options - Overwatch | |
| Display Mode | Fullscreen |
| Target Display | Monitor 1 |
| Resolution | 1920x1080 (300) |
| Field of View | 103 |
| Aspect Ratio | 16:9 |
| Vsync | Off |
| Triple Buffering | Off |
| Reduce Buffering | Off |
| Display Performance Stats | On |
| Display System Clock | Off |
| Limit FPS | Custom |
| Frame Rate Cap | 400 |
| Graphics Quality | High |
| Advanced | |
| Render Scale | 100% |
| Texture Quality | High |
| Texture Filtering Quality | High - 4x |
| Local Fog Detail | High |
| Dynamic Reflections | Low |
| Shadow Detail | Medium |
| Model Detail | Medium |
| Effects Detail | Medium |
| Lighting Quality | High |
| Antialias Quality | Medium - SMAA Low |
| Refraction Quality | High |
| Screenshot Quality | 1x Resolution |
| Local Reflections | On |
| Ambient Occlusion | On |
Step 4: Another round with the data
As with CS:GO, the frame rates you see in Overwatch depend heavily on whether you’re running around indoors or outdoors. The 60-second sequence we charted involved a mix of city streets, courtyards, and storefronts, with varying numbers of enemies and allies battling each other
Averaging 333 FPS is no minor feat at one of this game’s most demanding detail levels. Those instantaneous blips below 100 FPS late in my test run didn't even register during the match. I ran around and enjoyed the most fluid motion I've ever seen in this game, thanks to the Zephyrus S GX701’s flagship graphics processor and bleeding-edge 300Hz panel.
Switching over to a 60Hz refresh rate was far less satisfying. Overwatch’s bright colors and cartoony design make screen tearing unbearable at such a high frame rate, almost forcing you to use v-sync. But even turning v-sync on doesn’t make Overwatch look smooth at 60Hz. Tearing is less problematic (though not altogether solved), and the game’s input lag doesn’t get noticeably worse with the feature enabled. But there’s just no way to compensate for cutting the refresh rate by 80%. A 60Hz panel simply cannot get new information on-screen fast enough to rival the smoothness of a 144Hz or 240Hz display, never mind our new 300Hz flagship.
Getting the best performance possible from Tom Clancy’s Rainbow Six Siege
CS:GO and Overwatch are fast-paced first-person shooters, but Rainbow Six Siege is more tactical in nature. That means gamers are encouraged to strategize with each other using their headsets. Long-term support from Ubisoft keeps Rainbow Six Siege fresh. The company releases four new operations per year that include maps, playable characters, and equipment.
The development team is clearly doing something right. Rainbow Six Siege is one of the most-played games on Steam right now. Moreover, the ESL’s Rainbow Six Pro League attracts teams from all over the world, competing for hundreds of thousands of dollars in prize money each season. With that kind of cash on the line, it’d behoove you to get maximum performance from your PC.
Steps 1 and 2: Stick to the fundamentals
The same principles that got us ready to play CS:GO and Overwatch guide our Rainbow Six Siege configuration. We want the highest frame rates possible, so we turn off any software-based features that might cause our hardware to throttle. Again, set Windows to use its High performance power plan, or open the Armoury Crate utility and click the Turbo profile.
Maximizing CPU clock rates is especially important because Rainbow Six Siege’s AnvilNext 2.0 game engine is optimized for multi-core CPUs. In fact, the developer posted a blog about high CPU usage and how to address it. In our case, we want to leave v-sync disabled to keep Rainbow Six running as fast as possible, so it’s more than likely that Rainbow Six Siege will become CPU-bound Pegging the Core i7-9750H’s six cores at frequencies above 4GHz helps minimize bottlenecks that’d otherwise prevent NVIDIA’s GeForce RTX 2080 from realizing its potential.
Once more, we checked for new graphics drivers, verified that our panel was set to 1920x1080 and 300Hz, and gave NVIDIA’s Control Panel options a once-over. A couple of Reddit threads recommended changing “Maximum pre-rendered frames” to 1, so we made a small adjustment there.
Step 3: Tuning Rainbow Six Siege for maximum performance
Ubisoft’s aforementioned blog post suggested editing the gamesettings.ini file to enforce a frame rate limiter, preventing 100% CPU usage. The idea was that capping Rainbow Six Siege’s FPS would keep the game engine from leaning so hard on compute resources, freeing the CPU and GPU for other background tasks. We don’t want that, though. Rather, we want to be sure there are no constraints. We want the highest frame rates possible, allowing the Zephyrus S GX701’s ultra-fast GPU and 300Hz display to work as fast as they’re able.
Instead of imposing a frame rate cap, let’s tell the game not to limit performance at all. After you’ve started Rainbow Six Siege at least once, open your Documents\My Games\Rainbow Six – Siege\{ID number}\ folder and double-click GameSettings.ini. Scroll down to the [DISPLAY] header and make sure FPSLimit is set to 0. Save the file and launch Rainbow Six Siege.
Open the Options menu in the upper right-hand corner. Tab over to the Display menu and review its defaults. You may have to specify your panel’s refresh rate and disable VSync. There is a built-in benchmark that’s accessible through the Display menu, which did seem to mirror in-game performance. However, our test runs come from real gameplay.
Now jump over to the Graphics menu. Because Rainbow Six Siege does run at lower frame rates than CS:GO or Overwatch, we set the Overall Quality slider to Low and left it there. Fortunately, even those baseline settings look remarkably good.
| Display Options - Rainbow Six Siege | |
|---|---|
| Monitor | 1 |
| Resolution | 1920x1080 |
| Display Mode | Full Screen |
| Refresh Rate | 300.18 Hz |
| Aspect Ratio | Auto |
| Vsync | Off |
| Widescreen Letterbox | Off |
| Field of View | 60 |
| Graphics Options | |
| Overall Quality | Low |
| Texture Quality | Low |
| Texture Filtering | Linear |
| LOD Quality | Low |
| Shading Quality | Low |
| Shadow Quality | Low |
| Reflection Quality | Low |
| Ambient Occlusion | Off |
| Lens Effects | Off |
| Zoom-In Depth of Field | Off |
| Antialiasting | T-AA |
| Render Scaling | 50 |
| T-AA Sharpness | 50 |
Step 4: Data tells all
The performance range we observed through our 60-second benchmark was relatively narrow. That’s good news for fans of consistency. Dips down to about 140 FPS were still super-smooth, while spikes above 250 FPS exceeded what most high-end LCDs can display. Only our GX701’s 300Hz display can keep up.
Subjectively, tactical games like Rainbow Six Siege put a lot of pressure on a gamer’s reaction time. Breaching doors and turning corners happens without a single hitch or stutter with an average frame rate above 220 FPS. But then your eyes must adapt to whatever’s happening in the room. Is there an enemy hiding behind a desk? Is there a friendly you need to avoid shooting? In either case, a six-core CPU, flagship graphics processor, and 300Hz panel offer as much advantage as you can legally get in competitive play.
In comparison, setting the display back to 60Hz becomes a big impediment. So many frames are rendered for each refresh that screen tearing is quite palpable. The effect is distracting enough to negatively affect performance. I fared quantifiably worse in Rainbow Six Siege with a 60Hz refresh rate, even in the game’s AI-driven Scenarios. It took longer for me to adjust after running into a room with one or two baddies ready for an ambush. By the time everything came into focus, I was getting hit with multiple shots before I could neutralize the threat. Over the course of an entire mission, those handfuls of health turned into a higher rate of failure compared to my attempts with a 300Hz refresh.
This game’s tactical nature shows that it doesn’t matter if you’re running and gunning or creeping around terrorist-infested condominiums—high frame rates and a fast refresh are complementary components of a balanced graphics subsystem. Professionals gain a leg up on the competition thanks to unmatched fluidity, while casual gamers are treated to an experience that’s simply more enjoyable.
Getting the best performance possible from Rocket League
Although it takes time to perfect the mechanics of vehicular soccer, the genre has a devoted following. Tens of thousands of gamers keep Rocket League among the top titles on Steam, while regular tournaments encourage excellence with high-dollar prizes.
As with any other competitive game, high frame rates and a responsive display become real advantages against players on slower systems fighting through choppy animation. The hardware in our Zephyrus S GX701 pushes this game to its limit—well beyond what a 240Hz panel can display—for the smoothest experience available.
Straight to step 3: Get to the good stuff
There’s no reason to rehash the first couple of steps we took in the last couple games we've examined. Your PC should already be optimized by now. If it’s not, jump back to our Counter-Strike: Global Offensive walk-through where we discuss disabling power-saving features, tuning clock rates, updating drivers, and configuring graphics options.
Once you’ve handled the housekeeping, open your Documents\My Games\Rocket League\TAGame\Config\ folder and double-click the TASystemSettings.ini file. Scroll down until you find AllowPerFrameSleep and make sure it’s set to =False. This uncaps the game’s frame rate.
Next, fire up Rocket League and open the game’s Options menu. Make sure you’re running at your display’s native resolution in Fullscreen mode with Vertical Sync turned off. Under Basic Settings, set Render Quality and Render Detail to High. This is an Unreal Engine 3-based game, so it should serve up fast frame rates, even with a better-looking quality present in place.
| Windows Settings - Rocket League | |
| Resolution | 1920x1080 |
| Display Mode | Fullscreen |
| Vertical Sync | Unchecked |
| Basic Settings | |
| Anti-aliasing | Off |
| Render Quality | High Quality |
| Render Detail | High Quality |
| Max FPS | 250.00 |
| Advanced Settings | |
| Texture Detail | High Quality |
| World Detail | High Quality |
| Particle Detail | High Quality |
| High Quality Shaders | ✓ |
| Ambient Occlusion | ✓ |
| Depth of Field | ✓ |
| Bloom | ✓ |
| Light Shafts | ✓ |
| Lens Flares | ✓ |
| Dynamic Shadows | ✓ |
| Motion Blur | ✓ |
Step 4: Scoring a goal with high-end hardware
An average frame rate right around 250 FPS suggests that Rocket League is abiding by the game’s cap. However, charting out performance over time reveals a much more dynamic situation.
Rocket League drops to 180 FPS at its very lowest. If you’re using a 144Hz screen, it’ll refresh at a slower rate than the GeForce RTX 2080 GPU’s minimum performance level. At the top end, spikes above 350 FPS ensure that our 300Hz panel is being used to its potential. Dial back Rocket League's settings a bit from the High presets we used, and you'll experience an average frame rate closer to 300 FPS or more.
Even with the test settings we chose, the benefit of those screaming frame rates is most apparent as you spin the camera and maneuver around the ball. A 300Hz panel with snappy pixel response keeps the animation—particularly the stands of each stadium you play in—especially fluid and clear. It’s easy to track where you are on the field when fast-moving objects stay crisp.
At 60Hz, that’s not the case. Flip a 180 to catch up with a ball that flew past, and the background gets blurry, even with the GeForce RTX 2080 rendering at hundreds of frames per second. It’s truly disorienting. The high-refresh display eliminates this artifact.
Given that satisfying range of performance and the capable platform we’re testing, competitive Rocket League players can help themselves to the smoothest experience possible on our ROG Zephyrus S GX701 as they flick their cameras around to survey the field before getting into position or jumping for a block.
Arm yourself with the tools to succeed
The world’s first display with a 300Hz refresh rate can update 25% faster than the 240Hz panels many competitive gamers use. The key to getting the most out of this blazingly fast panel is feeding it with enough frames per second to keep the on-screen action fresh. That’s not a problem for our Zephyrus S GX701 laptop. The version we tested features a Core i7-9750H CPU, 32GB of DDR4 RAM, and an NVIDIA GeForce RTX 2080, outclassing most high-end desktop PCs. In the top esports games, across a range of genres, the GX701 proved that it has what it takes to take advantage of the 300Hz LCD. Just be sure to tune your games properly to achieve the frame rates necessary to use that display to its fullest.
My experience with the 300Hz GX701 convinced me that it gets no better for esports professionals on the move. This is top-of-the-line gear, the likes of which you’d expect to see at tournaments with lots of money on the line. But you don’t have to be ranked on a ladder to enjoy the benefits of expertly-balanced hardware tuned for high performance. Although the Zephyrus S GX701 won’t turn you into a pro overnight, gaming on one is sure to help you reach your highest potential.
Ready to get the jump on the competition with one of the fastest gaming displays around? You can get a 300Hz GX701 of your own in the United States for $3,299.99 on Amazon.
by Paul Cross


deploy_model.Rmd
Now that you’ve put in the work of building a model and it’s performing well on historical data, congratulations! It’s now time to prepare it to make reoccurring predictions. This document focuses on the requirements needed before you actually talk to the DBA/ETL team about creating the reoccurring schedule. At this point, you have
If you’ve done those, push on below!
In order to work with models in a production environment, first you must be able to have a saved model on disk. While we keep this section minimal, you can find out more about model training in our Getting Started vignette. If curious, you can find more about database connections here
Note, install tidyverse via install.packages('tidyverse')
library(healthcareai)
library(DBI)
library(tidyverse)
my_con <- build_connection_string(server = "HCS-GM0004",
database = "SAM")
con <- dbConnect(odbc::odbc(), .connection_string = my_con)
train_query <- "SELECT
[FacilityAccountID]
,[AdmitAgeNBR]
,[GenderCD]
,[EthnicGroupDSC]
,[MaritalStatusDSC]
,[Readmit30FLG]
FROM [SAM].[Schema].[SummaryVisitBASE]
WHERE InpatientFLG = 'F'"
d <- db_read(con, train_query)
models <- machine_learn(d = d,
FacilityAccountID,
models = "rf",
outcome = Readmit30FLG)
# Save my model
healthcareai::save_models(models, "readmit_models.RDS")
While the frequency will vary depending on the use case, for most healthcare ML scenarios you’ll need predictions on a reoccurring basis. Daily batch predictions are common. To create predictions, new rows (representing patients or patient encounters) are run against the model that lives in the RDA file.
Instead of simply creating predictions in R, however, in a production scenario you’ll be pushing these predictions to a database. Typically we append to the same table each night, such that a person will get an updated risk score for each day they’re in the hospital (for example).
Now we focus on the code that will run each night to create predictions. Note a couple of things:
WHERE
clause)prod_query <- "SELECT
[FacilityAccountID]
,[AdmitAgeNBR]
,[GenderCD]
,[EthnicGroupDSC]
,[MaritalStatusDSC]
FROM [SAM].[Schema].[SummaryVisitBASE]
WHERE InpatientFLG = 'T'"
d_out <- db_read(con, prod_query)
models <- healthcareai::load_models("readmit_models.RDS")
predictions <- predict(models, d_out)
Before we worry about pushing rows to the database, look at the format of your output by typing glimpse(predictions)
You might want push fewer columns than that to a table each night. Here’s how you slim this down:
predictions <- predictions %>%
select(FacilityAccountID, predicted_Readmit30FLG) %>% # Grab just two columns
rename(PredictedProbabilityNBR = predicted_Readmit30FLG) # Change col name
Now that we have only the columns necessary, let’s shift to the database table.
Use a tool like SQL Server Management Studio and a CREATE TABLE
statement.
WHERE 0 = 1
, such that only R is populating the output table.Incremental
, such that the table isn’t dropped and reloaded each night.Here we use the RODBC
package, which can be installed via install.packages('RODBC')
. Note that the database isn’t specified here, since it was defined above.
library(RODBC)
con <- odbcDriverConnect(connection = my_con)
sqlSave(con,
predictions,
"Schema.ReadmitMLOutputTable",
append = TRUE,
rownames = FALSE)
odbcClose(con)
If your predictions arrive in the database, congrats! You’re now ready to work with the DBA/ETL* team to schedule this reoccurring job, such that it runs in a manner that’s dependency-aware.
Before users start consuming your awesome ML work, it’s imperative that you verify that the model’s accuracy holds up in production. Performance on retrospective data isn’t the same as performance on incoming production data. Sometimes issues like data leakage or other issues cause the performance to drop.
Effectively, if you’re creating CLABSI predictions, you should wait a few weeks until a large number of the patients who have received risk predictions have left the hospital and had an outcome (CLABSI = Y/N) recorded so you can compare predictions to actual outcomes. Similarly, if you’re predicting 30-day readmissions, you need to wait ~45 days until you have enough data to verify if you accurately predicted who did or didn’t return to the hospital. If you have a heavy class imbalance (with rare CLABSIs, etc), you’ll need to wait longer. This evaluation can be done via healthcare.ai:
library(healthcareai)
library(DBI)
library(RODBC)
library(tidyverse)
my_con <- build_connection_string(server = "HCS-GM0004",
database = "SAM")
con <- dbConnect(odbc::odbc(), .connection_string = my_con)
prod_query <- "SELECT
[FacilityAccountID]
,[AdmitAgeNBR]
,[GenderCD]
,[EthnicGroupDSC]
,[MaritalStatusDSC]
,[Readmit30FLG]
FROM [SAM].[Schema].[SummaryVisitBASE]
WHERE InpatientFLG = 'T'"
d_out <- db_read(con, prod_query)
models <- healthcareai::load_models("readmit_models.RDS")
predictions <- predict(models, d_out)
con <- odbcDriverConnect(connection = my_con)
sqlSave(con,
predictions,
"Schema.ReadmitMLOutputTableBASE",
append = TRUE,
rownames = FALSE)
odbcClose(con)
*Note: for those working in a Health Catalyst environment, proceed with the ML-Prod document in Spark


Returns the exponent of an expression; that is, the value of e (the base of natural logarithms) raised to the power of the expression.
Syntax
Exp ( numeric_value_expression )
| Parameter | Description |
|---|---|
numeric_value_expression |
A numeric value (see MDX Grammar Rules). |
Notes
Exp returns the inverse of Ln, the natural logarithm.
The constant e is the base of the natural logarithm. e is approximately 2.71828182845904.
Example
The calculated member Index is created to represent e raised to the power of [Variance %]/100. In the example, [Variance %] divided by 100 is the numeric value expression provided to the Exp function.
WITH MEMBER [Scenario].[Index] AS 'Exp( [Scenario].[Variance %]/100 )' SELECT {[Scenario].[Variance %], [Scenario].[Index]} ON COLUMNS, {[Market].children} ON ROWS FROM Sample.Basic WHERE {[Sales]}
This query returns the grid:
| Variance % | Index | |
| East | 10.700 | 1.113 |
| West | 10.914 | 1.115 |
| South | 3.556 | 1.036 |
| Central | 3.595 | 1.037 |
See Also


CHICKEN A film review by David Zanetti Copyright 1996 David Zanetti
New Zealand films have always been a bit unusual. Sometimes that unusualness creates something special - NEVER SAY DIE, GOODBYE PORK PIE, and ONCE WERE WARRIORS. Sometimes that unusualness, mixed with Hollywood-style scripts (complete with unlicensed guns and car chases), just doesn't quite work which is the case with CHICKEN.
Take one seventies pop icon, add a few wrinkles, years and failed comebacks and we have Serrento, who'll take any job to pay the bills, or another shot at his lost fame. In this case it happens to be an advertisement for "Chik N Lik". As part of the gig he's got to actually turn up to the new store and serve customers. Along for the opening are a number of protesters, dismayed at the treatment of chickens (and other animals).
Add one slightly disturbed individual (who lives with chickens) intent on destroying the chicken-serving (and therefore murdering) Serrento, one bodyguard who happens to be at the new store when trouble strikes, and a daughter who's looking for her long-lost mother. While you're at it add in Serrento's manager and his son, and a plan to revive Serrento's lost stardom by faking his death.
The problem this film strikes is none of this actually seems to fit New Zealand, and the whole daughter-seeking-her-past subplot is buried and is thrown away in an epilogue. The humour, while at times is there, seems to play secondary to the 'action'. Unfortunately neither comes off that well. Those action sequences are hampered by the telegraphing of the plot to the audience, and the sheer lack of bang in them.
For those familiar with New Zealand actors you'll see a few familiar faces here, my favourite appearance (although short) being that of John Leigh, aka Lionel Skeggins from the New Zealand television soap SHORTLAND STREET. At times however, it plays like a who's-who of current New Zealand cinema and television. We'll forgive it for that, there are just not that many professional movie/television actors around here worth mentioning. Those that do appear to offer support do so pretty well.
All in all, CHICKEN is a film I doubt will be seen outside New Zealand and Australia, but it might show up in a collection of films from the land of the long white cloud. For a much better Hollywood-script-in-New-Zealand film try NEVER SAY DIE, featuring Temuera Morrison (before his stint in SHORTLAND STREET) in his film debut. Well worth digging out!
Rating (-4 to +4): 0 for NZ, -2 for the rest of the world.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Follow these steps to apply module filters in the Strategy Builder:
- Click Filters.
- Select the column name you want the filter to be applied to:
- Name: To specify which characters need to be included in the module name to be included in the filtered results.
- Category: To specify which type of modules should be included in the filtered results.
- Author: To specify which characters need to be included in the author name to be included in the filtered results.
- If you selected the Name column in step 2, enter the characters you want to be included in the module name.
The module catalog displays modules that contain the characters you entered.
- If you selected the Category column in step 2, select the checkboxes next to the categories you want to be included in the results.
The module catalog displays modules that are in the categories you selected.
- If you selected the Author column in step 2, enter the characters you want to be included in the author name.
The module catalog displays modules that have author names containing the characters you entered.


<lcAnswerOption>
The <lcAnswerOption>
element was deprecated in DITA version 1.3. It
was replaced with the <lcAnswerOption2>
element. It was originally
intended to provide the content and feedback for a question option, and can indicate the
correct option in a learning interaction.
Category: Interactions domain content elements (DEPRECATED)


Your browser does not support canvas.


It seems you don't have any tv shows available. Check out your settings to make sure you set your path!


About me
My name is Bashar Aqleh, I am 28 years old, I have a bleacher degree in Business Administration from the Middle East university plus I am studying full stack web development so i could make a career shift in my life.
My work history
Over the past 7 years, I have worked in 3 different workplaces and this has worked well for me to improve my skills. It is my motive to keep learning every day and I actively seek feedback to keep growing.
Education and Work experance
- Education
- Softwar engineer - LTUC-Abdul Aziz Al Ghurair School of Advanced Computing (ASAC)
- Bachelor’s Degree in Business Administration – Middle East University
- Tawjihi (Adabi) – Latin Patriarchate School
- Work experance
- Dufry Group
- Berlitz Language Center
- Umniah Belong
My top ten places to visit.
- Paris, France
- Florence, Italy
- Santorini, Greece
- Amsterdam, Netherlands
- London, England
- Barcelona, Spain
- Prague, Czech Republic
- Munich, Germany
- Budapest, Hungary
- Dublin, Ireland
My goal
Following my brothers footsteps in becoming a web developer in one of the leading companies in Amman orinternational


{% extends "base.html" %} {% block content %} Expense Tracker Add New Transaction Category General Food Amount $ Negative: expense, Positive: income Note Location Add Transaction Your balance $0.00 Income $ 00.00 Expense $ 00.00 History McDonalds $100 McDonalds $100 McDonalds $100 × {% endblock %} {% block map %} {% endblock %}


rvm FAQ & Notes
Do I need to use sudo with gems?
NO. DO NOT USE sudo for rvm managed rubygems. If you require more explanation see the gems page.
Install gems as root?
NO. If you require more explanation see the gems page.
My ruby is compiling as 32 bit but I am on Mac OS X Snow Leopard which has heavy advertisement that it is 64 bit!!!
rvm compiles to your current running kernel's architecture. This means that if your kernel is running as a 32 bit kernel (uname -m) it will compile 32 bit. You can override this behavior by placing the following in your ~/.rvmrc before installing the ruby interpreter:
rvm_archflags="-arch x86_64"
rvm is not found or the rvm selected default ruby is not set for new shells...
rvm must be included at the bottom of the profile files. Otherwise your settings will clobber it's (example: PATH)
Does rvm work on windows? Will it in the future?
NO. If you would like to manage multiple versions of ruby on windows please use pik which is an excellent tool by Gordon Thiesfeld. You can find it on Github.
Can I use a path with spaces?
Currently spaces in paths are not supported. Patches welcome :)
How do I set a ruby to be default?
Seting the default ruby is explained here .
What are the defaults.
The default interpreter is 'ruby'. The default versions for each ruby interpreter are:
- ruby: 1.8.6
- jruby: 1.3.1
- rubinius: current head
Where are Ruby Gems kept?
- Ruby Gems for all installed ruby interpreters and versions are stored completely separate. Gems are located in ~/.rvm/gems/$interpreter/$version. Gems can be additionally separated using Gem Sets .
Where is everything installed to ?
rvm installs everything into ~/.rvm. To remove rvm from your system simply remove ~.rvm. You may have one additional config file in ~/.rvmrc and of course the rvm hook in your bash/zsh startup files.
Do I need the gem after I install rvm?
No, the gem is only used for distribution, you can just as easily clone the github repo and run ./install. After installation the Gem is no longer necessary and can be safely removed.
How do I get my rvm set default Ruby to work with TextMate?
First of all be aware of one of rvm's new features:
rvm 1.9.1 --symlink textmate
This will create a '~/.rvm/bin/textmate_ruby' file which you can assign textmate to.
WARNING: Changing Textmate's Ruby might lead to Textmate bundle errors so be sure you know what you are doing or read Textmate's documentation carefully :)
Peter Cooper Says: August 27th, 2009 at 1:55 amChris: I just spent an hour looking into this, lol.  Basically it didn't respect the PATH switches RVM does at all and the TM stance seems to be you need to manually set the PATH in the preferences which is lame IMHO.
Here's the fix to make it all "just work". You'll need to edit 2 files within the Textmate.app package.
Open the file: /Applications/TextMate.app/Contents/SharedSupport/Support/lib/tm/process.rb Find the line: exec(*cmd.compact) Replace it with: exec("bash -lc '" + cmd.compact.join(" ") + "'")
Open the file: /Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/RubyMate/run_script.rb Find this line: cmd = [ENV['TM_RUBY'] || 'ruby', '-KU', '-rcatch_exception'] Right before it add: ENV['TM_RUBY'] = nil if ENV['TM_RUBY'] == '/usr/bin/ruby' So the result looks like: ENV['TM_RUBY'] = nil if ENV['TM_RUBY'] == '/usr/bin/ruby' cmd = [ENV['TM_RUBY'] || 'ruby', '-KU', '-rcatch_exception']
Then restart the app. Textmate will now use the ruby installation that rvm has set for the default. So if you want Textmate to switch Ruby versions, just run "rvm [version] --default" to switch it to your desired version.
Netbeans
There is a great writeup on how to properly use rvm inside netbeans by Alan Skorkin If you use netbeans you should really read Alan's writeup.
Additionally, thanks to our friendly mr-interweb on IRC a hint on gems with netbeans
13:46 mr-interweb: Netbeans was detecting the wrong gem root
13:48 mr-interweb: Just a FYI in case other people have problems with Netbeans, Netbeans does not allow you to type in a path. You must browse to the path, but it will not show you hidden folders. So, you must create symbolic links like "ln -s ~/.gem ~/gem"
Culerty
See this gist by mchung for information on setting up Capybara (w/ @culerity support) with rvm: http://gist.github.com/268216


Quote: "{{sample.quote}}"
Quote Author: {{sample.author}} Creator Name: {{sample.name}}
Creation Date: {{sample.date}} Time Difference: {{calculateDiff()}}


Today
Warm Up
Beginner | 5 mins
Last Score: B+
View Playlist
Warm Up
Beginner | 5 mins
Last Score: B+
View Playlist
View More
Take The Test
YELLOW BELT
500pts Required


Fresh me, ready to put a dent in Biotech
Elucidata is a Biotech company which enables scientists to find drug target, during the early stage of a drug discovery process. It does so by bringing insights from experiments carried out by scientists at different labs, academic institutions, and pharmaceutical companies. Its product, PollyTM is one stop solutions for analyzing Metabolomic data. They are also planning to foray into other Omics data. Check out their website for more product updates.
Visit websiteCreate an easily recognizable identity which works on Digital and Physical media in all forms and shape.
Art Direction
Graphic Design
Designer
Founder
Co-founder
Design mentor
Figma
Illustrator
2 Weeks
Very few people knew about us.
Very few people understood the kind of work we were doing.
Potential hires and clients struggled to trust the company and our offerings.
We looked like a naive company. Even though our offerings were used by big pharma companies.
After trying a lot of ideas, we choose to go with the Benzene structure and made a dent into it to create “E” for the Elucidata. The benzene ring is a very known and easily recognizable compound to both the persona( potential hires and clients ). Benzene depicts the stability and its sharp edges in the figure depict the cutting edge technology that Elucidata works on.
I went through various typefaces on google fonts, as I wanted to pick a unique sans-serif typeface for UI of the product and Serif typeface for the content-heavy pages. Like Website, Blogs, Letterhead, Slides, etc. I choose Heebo and Merriweather. Heebo is an optically corrected typeface which is similar to Roboto. You will notice the difference only in use. It gave the product a unique personality and fulfilled all the need of any professional quality typeface. Merriweather, on the other hand, gelled perfectly with it and looked beautiful at all different sizes.
During our discussion the stakeholders wanted the brand to speak for simplicity, seriousness, trust, cutting edge and freshness. To achieve this I looked at more than 100 Biotech companies on Angellist and observed that there were very few companies which were using shades of purple. As purple closely resembles most of the words above. After trying out different contrasts and shades of purple. We settled down with the below palette.
Well, It perfectly gels on all the platforms.
This project helped me understand the value of inclusion from different stakeholders. As their feedback were helpful in finalizing the design. Once the logo was finalized. We showed it to everyone and asked for their feedback. Most of them liked it and wanted to know the rationale behind the choice of color, font, and shape, etc. This exercise sparked a dialog between the teams and we had some fresh suggestions. Out of which a few made to our final tweaks.
I learned about brand strategy in the process of designing the logo. My mentor helped me see the bigger picture of the project, and helped me answer the questions like "How will the logo be used in a certain context?" We primarily focused on Print and Digital media. In Print we had to consider the design of product sheets, leaflets, scientific posters, visiting card and in Digital media we had website, product, social media, emailers, slides, and design system, etc.


TURN IT UP
Reviewed by Harvey Karten New Line Cinema Director: Robert Adetuyi Writer: Robert Adetuyi Cast: Pras, Ja Rule, Patricia Velazquez, Tamala Jones, Vondie Curtis-Hall, John Ralston, Jason Statham
If you want to know how Blacks have been treated by Whites in the music industry, you'd look for a revival of August Wilson's play, "Ma Rainey"s Black Bottom," set in 1927 in a rundown recording studio in Chicago. The drama involves a White owner of a recording company and her White manager plus Ma Rainey, a legendary blues singer who is due to cut new sides of old favorites. The play won the prestigious New York Drama Critics Circle Award for its portrayal of rage, racism, and the self-hate that racism and exploitation breeds.
If you want to know how stupid a movie can be, take in "Turn It Up," Robert Adetuyi's lame attempt to expose, in part, the roadblocks faced by an excellent hip-hop artist when the only way he sees to raise the money needed to cut an album is to take part reluctantly in criminal activities with his manager.
A film with zero crossover appeal and limited allure even for the targeted audience of boyz in the 'hood, "Turn It Up" plays through every cliche imaginable with its clunky dialogue highlighting a basically good guy, Diamond (Pras) who lives in Brooklyn's East New York projects and hopes for a debut CD that will break him out. He is aided by his old friend Gage (Ja-Rule), who is such a great buddy that anything he might steal, any influence he might have, he is willing to use for the benefit of his pal. Since Diamond is aware of his friend's devotion, he is willing to be dragged into Gage's world of drug dealing, robbing, even tolerating the man's murders.
This good-friend bad-friend cliche--most recently used in the arthouse movie "Orfeu" about a great musician who remains devoted to his old drug-dealing buddy in the Brazilian favelas of Rio--is just the beginning of the overdone motifs. Diamond's dad (Vondie Curtis Hall) wants to set his son straight, but he's a flawed character as well having abandoned the family some time back. There's more. Diamond has a girl friend (Tamala Jones), who, like Dad, is lobbying to put her man on the straight-and-narrow path but-- all together now--SHE'S PREGNANT! What's a poor guy gonna do?
Filmed in New York and Toronto, "Turn It Up" does not even enjoy an exotic Caribbean locale as did another turkey, Chris Browne's "Third World Cop," and it sure as heck has no-one who possesses the charisma that Sam Jackson gives to the sizzling remake of "Shaft." If anything will draw the targeted audience, the special ingredient would be the prominence of Prakazrel Pras Michel, a Haitian-American rapper from the group called The Fugees, and Ja Rule, from the group Cash Money Click. Of course the soundtrack is loaded with hip-hop performed by such artists as Tasha Scott, D-Fuse and Rapper Noyd while the dialogue is equally freighted with "shut the f*** up" and the like.
Rated R. Running time: 95 minutes. (C) 2000 by Harvey Karten<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


[1]
it was responsible for taking orders and managing the pool area.
[2]
it was very old wavy soft uncomfortable mattress and a phone fixed.


Once the data had been collected from the usability test, we then needed to convert this raw data into more meaningful metrics and suggestions that we can then pass back to the developers of STG.
Because the responses to the post interview are not standardised into a number scale and are instead unstructured comments from the test subjects we needed to find a good way to display this data.
To organise the data we first took all of the responses to each of the ten questions and put them into a single view so that we could start to see common themes between the responses. You can view all the data in Appendix A.
Once this had been done, tally charts were created to categorise the responses into common themes. These themes had a direct relation to the various features and UI elements of STG. The tally charts gave us the opportunity to create pie charts which clearly illustrate the common themes in a more visual way.
Some of the questions that we asked did not provide a wide range of results as all users answered in very similar ways. While this data cannot be visualised, it is still valuable as it contains some comments that can be used to reinforce the suggestion that we will make.
The way we have laid out the results are based on a question by question basis and will cover all the answers that the participants have given. From here we can see what the most common issues are and provide some suggestions based on this analysis.


{% extends "bs4demo/main.html" %} {% load cms_tags %} {% block main %}
Use this placeholder as a quick way to start editing a new CMS page.
All you have to do is to append ?edit
to the URL and switch to “Structure” mode.
Into this hard coded Bootstrap Column, add a Text Plugin.
If you want to further subdivide this column, add a Row Plugin with their own columns.


 The work is often sub-par due to it being offloaded to inexperienced over-seas workers.
The people who make decisions at most agencies are often the people with the least amount of technical knowledge. Why would you want to spend the majority of your time talking to a middle man who has no idea how to come up with a solution to your problems?
Remember the telephone game we all played in elementary school? By the time it got to the third person the story changed entirely. With me, it's simple. You talk to me and I'm the one doing the work.
It really depends on the project. There's no secret formula or price chart that I try to pigeon hole clients into.
Once I have a strong grasp of what you want to do then I will come back at you with a proposal that is hand tuned for your business' needs.
Often times sites will change over time that are out of my control. For example if I created a site for a company 6 years ago and they've moved on since then, their site could very well be gone.
Long story short, I don't really care about boasting about all of the projects and websites I've been involved with. You're just going to have to trust me, I will also supply references on demand if you still question my abilities.
You're probably thinking "well, just host a copy on your own server". Sure I could do that, but again it's not worth the hassle. Let's focus on your business' needs, not mine.
Web app development, website design, marketing, copywriting and infrastructure automation/management. I'm also capable of helping you create a brand and shape up your business ideas.
I also have extensive knowledge when it comes to the Shopify platform, for both theme creation and application development.
Nah. I couldn't care less about a fancy piece of paper and I have no intentions of ever working at a place that highly values a degree.
That does not mean I'm against education though. In fact, it's the opposite. I love learning. That's part of why I enjoy what I do so much. I get to learn so much about so many things.
Nope, I really enjoy what I do. I'm not just doing this to cash checks. If I had 50 billion dollars sitting in the bank I would still be cranking out code and consulting with people.
Of course if that were the case I might be doing it from a 140 foot yacht while sailing around the world. So long as I had a reasonable internet connection of course.
A majority of it is remote but if you live near by then I don't have a problem meeting up somewhere to go over things in person. I do have a number of local clients.
Honestly, working remotely is faster and better for everyone. A lot of clients are skeptical at first but it's really easy to keep track of everything when it's done over e-mails or the phone.
Do you really want to sit in traffic to meet up for lunch somewhere? Instead of spending 20 minutes traveling, wouldn't it be better to spend 20 minutes getting something accomplished that drives your business forward?
{% include form.html redirect="faq" color="fuchsia" %}


Testing framework based on JUnit is integrated with S2 to make tests on development using containers fun. Followings are some features:
S2Container is automatically generated for each test method(textXXX).
register(),getComponent(), and include() for a S2Container is made available.
If include() path is the same package as test class package, is is possible to omit path in a package. As an example, if aaa.bbb.CccTest class includes aaa/bbb/hoge.dicon, it is possible to write include statement as include("hoge.dicon").
TestCase fields that are not static nor final are automatically set with underscore character (_) omitted from their names.
TestCase fields with interface type variable definitions are automatically set by S2Container.
Values automatically assigned are cleared (set to null) afer test method ends.
If test method(testXxx) is defined with corresponding setUpXxx() and tearDownXxx() methods, it is invoked after setUp() and before tearDown() are invoked. Thus, it makes initialization and finalization process easier.
By ending test method names with Tx(e.g.testXxxTx) in include("j2ee.dicon") file, transaction is initiated just before the test method and rolled back after the test method is invoked. Thus, it is unnecessary to recovery database data after each test.
package test.org.seasar.extension.tx;
import javax.transaction.Status;
import javax.transaction.TransactionManager;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.seasar.extension.unit.S2TestCase;
public class RequiredInterceptorTest extends S2TestCase {
private static final String PATH =
"RequiredInterceptorTest.dicon";
private TxBean txBean_;
private TransactionManager tm_;
public RequiredInterceptorTest(String name) {
super(name);
}
public void testInvoke() throws Exception {
assertEquals("1", true, txBean_.hasTransaction());
assertEquals("2", Status.STATUS_NO_TRANSACTION, tm_.getStatus());
}
public void testInvoke2() throws Exception {
tm_.begin();
assertEquals("1", true, txBean_.hasTransaction());
assertEquals("2", Status.STATUS_ACTIVE, tm_.getStatus());
tm_.commit();
}
protected void setUp() throws Exception {
include(PATH);
}
protected void tearDown() throws Exception {
}
public static Test suite() {
return new TestSuite(RequiredInterceptorTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.main(
new String[] { RequiredInterceptorTest.class.getName()});
}
}
The example demonstrates component construction and access are automatically handled by S2TestCase allowing each test method to focus on what really is to be tested.
This example inquires empno in EMP table using DAO. When empno=9900 is inquired, a result set consisting of a join of emp table where empno=9900 and dept table where deptno=99 should be returned. To test this case, Emp table, dept table, and data to verify the result are necessary.
Verification data is entered in MS Excel with sheet name as a table name, first row containing column name, and following rows holding test verification data.
It si possible to manually enter all the verification data, but we will generate result data from the database table. Please refer to setup to initialize HSQLDB database. We will use Db2Excel to create Excel data from the database table.
SqlReader is used to read database data into DataSet. The first argument to addTable() is table name (sheet name). The second argument is the condition.
XlsWriter writes out DataSet to Excel. File path is specified in the constructor. File path is relative to Eclipse's default file output folder.
Database data can be written out to Excel simply by invoking read() method in SqlReader and write() method in XlsWriter. Refresh view on test.examples.unit package in Eclipse to confirm that getEmployeePrepare.xls was created.
Right click on getEmployeePrepare.xls and choose Open -> System editor to open the file in Excel (MS Excel must be installed in the machine). If you just double click on getEmployeePrepase.xls, Excel is opened within Eclipse. In emp sheet, change EMPNO to 9900 and ENAME to SCOTT2. In dept sheet, chante DEPTNO to 99 and DNAME to RESEARCH2. Save the result and exit Excel.
Next, right click EmployeePrepare.xls and choose Refresh to tell Eclipse that we just edited the file. Eclipse should copy the book to the default output folder.
Next, we need to prepare verification data. Edit Db2Excel.dicon as follows:
test/examples/unit/Db2Excel.dicon
<components> <include path="j2ee.dicon"/> <component class="org.seasar.extension.dataset.impl.SqlReader"> <initMethod> #self.addSql("SELECT e.empno, e.ename, e.deptno, d.dname FROM emp e, dept d WHERE empno = 7788 AND e.deptno = d.deptno", "emp")
</initMethod> </component> <component class="org.seasar.extension.dataset.impl.XlsWriter" instance="prototype"> <arg>"../src/test/examples/unit/getEmployeeResult.xls"</arg> </component> </components>
Create getEmployeeResult.xls file in the same manner as above. Set EMPNO=9900 and ENAME=SCOTT2 in emp sheet and DEPTNO=99 and DNAME=RESEARCH2 in dept sheet. Let's start testing!
setUp() reads app.dicon. By ending the test method name with Tx as testGetEmployeeTx in the above example, a transaction is started before the test method is called and it is rolled back afterward so the database will be left unmodified by the test.
readXlsWriteDb() and readXlsAllReplaceDb() saves test data into the database. When Excel file is in the same package as the test class, package path may be omitted. Invoke readXlsWriteDb() and readXlsAllReplaceDb() in first row of textXxxTx() so database can rollback after the test. These methods insert data after deleting data from sheets in the opposite direction from their definitions. When using readXlsAllReplaceDb(), it may sometimes be necessary to create an empty sheet to avoid foreign key constraint error. As an example, if there is a foreign key constraint on table A to table B, it is necessary to create table B even though only data from table A is to be used. It is necessary to define table A then define table B.
If interface variable(dao_) is declared as an interface, it will be taken out from S2Container and set before the test method is started. Data returned from Dao will be converted to DataTable so they can be compared with data from Excel. DataTable.setupColumns(Class) is used to construct column data from JavaBeans meta information. Result of calling Dao from DataTable.copyFrom() is copied to DataTable. copyFrom method may have JavaBeans, Map, JavaBeans, orMap List as an argument.
readXls() reads data verification data from Excel and compares it with Dao result.


23 Forests
Of the 23 forest reserves, 16 of them have exceeded 65% degradation quotients. 93%of illegally grown agricultural products in these surveyed national parks is cocoa. Of the approximately 4,392 km² surveyed, 3,239 km² have already been transformed into cocoa plantations.


Monday 16/02/2015
(none)
Tuesday 17/02/2015
3:00 pm
Fun Stuff
Tuesday Funtimes
7:00 pm
Later Fun Stuff
Tuesday Funtimes
Wednesday 18/02/2015
(none)
Thursday 19/02/2015
6:30 pm
Ruby on Rails InstallFest
Ruby and Rails Melbourne
Fun Stuff
Thursday Funtimes
Friday 20/02/2015
7:00 pm
JSFest
MelbJS
Next Week Sneak Peek
Golang Go-od Times
/
Ruby and Rails Melbourne


Disclose Names of Corrupt Teachers: Midday Meal Workers
STAFF REPORTER
GUWAHATI: The All Assam Primary Schools Midday Meal Cook and Helpers’ Association has dared Education Minister Siddhartha Bhattacharya to disclose the names of the teachers involved in corrupt practices in running the midday meal scheme.
Bhattacharya recently accused headmasters of certain primary schools of being involved in corrupt practices while operating the midday meal schemes. The minister said the government had gathered enough evidence, both still and video images, to prove the allegation.
The allegation of the Education minister has come at a time when the State is witnessing widespread protests and agitations against the government’s move to engage NGOs in cooking and distribution of mid-day meal in schools.
General Secretary of All Assam Primary Schools Mid-day Meal Cook and Helpers’ Association Zahanara Begum said the midday meal scheme has been efficiently carried out by the teachers, cooks and helpers across the State since 2005.
“If a section of teachers were involved in corrupt practices in running the midday meal scheme, why were they not punished? If some teachers had misused goods and funds meant for the midday meals, how could the minister justify handing over the scheme to the NGOs. Those involved in cooking midday meals for several years cannot be kicked out from the job by involving NGOs. We dare the Education minister to disclose the names of erring teachers and punish them,” Begum said.
On other hand an evaluation conducted by the Union Human Resource Development (HRD) Ministry has found that over 70 per cent children who availed mid-day meals in government schools in Assam could concentrate better on studies after meals. While 87 per cent children said they relished the taste of the food.
According to the evaluation 92 per cent children going to government schools are benefitting from mid-day meal while 80 per cent of the parents surveyed agreed that the scheme has improved enrolment as well as attendance of children.
Also Read: Midday Meal Workers’ Express Contempt at State Government
Also Watch: Govt all set to push for the contentious Citizenship Bill in the winter session of Parliament


Daily Specials
Pizza(8") $7offMonday
Appetizers 30%offTuesday
Desserts 50%offWednesday
Pasta $7offThursday
Beverages $10offFriday
Brunch 20%offSaturday
Happy Hours 50%off(3pm-5pm)Sunday


Profile Application
Sanjiv Chemudupati
Choose csv file
Analyze
# of Plants by Primary Fuel - {{current_country_name}}
{{ pie_script|safe }} {{ pie_div|safe }}
Production Capacity by Primary Fuel - {{current_country_name}}
{{ hbar_script|safe }} {{ hbar_div|safe }}


Frankie's Photos
One dog, many photos
{{ item['fields']['Name'] }}
{{ item['fields']['Notes'] }}
This is a link


There is a hidden planet in the Star Wars Universe named after Drogheda, Co Louth
A hawk-eyed Reddit user spotted the fictional planet in the galaxy far, far away
by Andrew ByrneA planet hidden in the Star Wars Universe is named after Drogheda in Co Louth.
The small planet in the galaxy far far away, was spotted by a hawk-eyed Reddit user on an official Star Wars galaxy map.
Phooka12 on Reddit said in a post, "Meanwhile in a galaxy far away", with a photo of the Star Wars Universe and an arrow pointing at Drogheda.
The secret planet can be found in the 'Teraab' section of the universe around the Mid Rim in grid Q11.
Surrounding planets include Pesmenben, Dica, and the more commonly known Ruusan where the Sith Lords were created.
The planet is described as having a "moderately warm" climate covered in forests and mountains, according to fan made website 'Wookieepedia'.
It is said to be inhabited by humans and was ruled by the warrior Queen Maeve at one point who began the 'state religion of the Galactic Republic itself'.
A point of interest found on the planet is the Drogheda Citadel which was the "headquarters of the ruling family of the planet".
The description reads: "The Drogheda Citadel was a near impenetrable castle on the planet Drogheda.
"It was the headquarters of the ruling family of the planet, and was only reachable by Sky-sled.
How to follow the Irish Mirror on social media
You can like our main Facebook page here.
Our Irish Mirror Sports page - which brings you all your Irish and UK sports news - can be found here.
You can also check out our Irish Mirror GAA sports page.
The Irish Mirror Twitter account is @IrishMirror while our sports account is @MirrorSportIE.
Our Instagram account can be found here.
"During the Drogheda Civil War, the citadel was attacked by the Drogheda Revolutionaries, led by Lando Calrissian and Danu.
"The current owner of the citadel Queen Sarna was captured by the rebels and desposed."
The planet is rich in ore and serves as a wealthy mining planet in the region.
You can search for the wee planet here on swgalaxymap.com.


{% if item.as_numerator.exists or item.denominators.exists or item.disaggregators.exists %}
This data element is included in the following Indicators, some indicators may be hidden based on your current permissions.
{% if item.as_numerator.exists %}
As a numerator
{% for num in item.as_numerator.all|can_view_iter:user %}
{% include "aristotle_mdr/helpers/itemLink.html" with item=num %}
{% endfor %}
{% endif %}
{% if item.as_denominator.exists %}
As a denominator
{% for denom in item.as_denominator.all|can_view_iter:user %}
{% include "aristotle_mdr/helpers/itemLink.html" with item=denom %}
{% endfor %}
{% endif %}
{% if item.as_disaggregator.exists %}
As a disaggregation
{% for dis in item.as_disaggregator.all|can_view_iter:user %}
{% include "aristotle_mdr/helpers/itemLink.html" with item=dis %}
{% endfor %}
{% endif %}
{% else %}
This data element is not included in any Indicators.
{% endif %}


|
Scheduler
|
#include <taskScheduler.h>
Public Member Functions | |
| TaskScheduler (std::shared_ptr< SchedulerConfiguration > conf) | |
| ~TaskScheduler () | |
| void | scheduleTask (TriggeringEvent trigger) |
| This function is the scheduler. When called, it schedule the task to be executed on the processor amaong the tasks in the ready queue. The actual algorithm that selects the best task is found in the SchedulingDiscipline class. More... | |
| void | clearRunningTask (std::shared_ptr< Process > p) |
| void | dealWithMissedDeadlines (std::shared_ptr< Process > p) |
| to be called when a deadline mis event happends. This function will terminate the task and update the performance counter. More... | |
| void | end (std::string reportsFolder) |
| cleanup and print reports More... | |
| void | scheduleEndOfBurst (std::shared_ptr< Process > runningTask) |
| void | putRunningTaskBackToReadyQueue (std::shared_ptr< Process > task) |
| void | setDiscipline (std::unique_ptr< SchedulingDiscipline > discipline) |
| void | printDeadlineMissesReport (std::string folder) |
| void | printReports (std::string folder) |
| void | printStatus () |
| void | printRunningProcess (std::shared_ptr< Process > runningTask) |
| void | printInvocation () |
| void | setBurstEnd (std::shared_ptr< Event > e) |
| std::shared_ptr< Event > | getBurstEnd () |
Public Attributes | |
| std::unique_ptr< SchedulingDiscipline > | discipline |
| std::shared_ptr< Process > | runningTask {nullptr} |
| std::shared_ptr< Event > | burstEnd |
| unsigned int | deadlineMisses {0} |
| Utils::Record | deadlinesHistory |
| double | previousTime {0.0} |
| std::shared_ptr< SchedulerConfiguration > | conf |
Definition at line 31 of file taskScheduler.h.
| TaskScheduler::TaskScheduler | ( | std::shared_ptr< SchedulerConfiguration > | conf | ) |
Definition at line 35 of file taskScheduler.cpp.
| TaskScheduler::~TaskScheduler | ( | ) |
Definition at line 41 of file taskScheduler.cpp.
| void TaskScheduler::clearRunningTask | ( | std::shared_ptr< Process > | p | ) |
Definition at line 128 of file taskScheduler.cpp.
| void TaskScheduler::dealWithMissedDeadlines | ( | std::shared_ptr< Process > | p | ) |
to be called when a deadline mis event happends. This function will terminate the task and update the performance counter.
| p | the task that missed its deadline |
Definition at line 105 of file taskScheduler.cpp.
| void TaskScheduler::end | ( | std::string | reportsFolder | ) |
cleanup and print reports
Definition at line 260 of file taskScheduler.cpp.
| std::shared_ptr< Event > TaskScheduler::getBurstEnd | ( | ) |
Definition at line 182 of file taskScheduler.cpp.
| void TaskScheduler::printDeadlineMissesReport | ( | std::string | folder | ) |
Definition at line 245 of file taskScheduler.cpp.
| void TaskScheduler::printInvocation | ( | ) |
Definition at line 190 of file taskScheduler.cpp.
| void TaskScheduler::printReports | ( | std::string | folder | ) |
Definition at line 239 of file taskScheduler.cpp.
| void TaskScheduler::printRunningProcess | ( | std::shared_ptr< Process > | runningTask | ) |
Definition at line 200 of file taskScheduler.cpp.
| void TaskScheduler::printStatus | ( | ) |
Definition at line 252 of file taskScheduler.cpp.
| void TaskScheduler::putRunningTaskBackToReadyQueue | ( | std::shared_ptr< Process > | task | ) |
Definition at line 159 of file taskScheduler.cpp.
| void TaskScheduler::scheduleEndOfBurst | ( | std::shared_ptr< Process > | runningTask | ) |
Definition at line 136 of file taskScheduler.cpp.
| void TaskScheduler::scheduleTask | ( | TriggeringEvent | trigger | ) |
This function is the scheduler. When called, it schedule the task to be executed on the processor amaong the tasks in the ready queue. The actual algorithm that selects the best task is found in the SchedulingDiscipline class.
| trigger | the kind of event that triggered the scheduler invocation. This is needed to let the discipline know if it should act on the event, or skip it. This is bad design. I should rather make use of polymorphism. However I haven't found a better way to implement it so that a) the events stay independent from the discipline, and b) the disciplines stay easy to code, and don't have to be updated if a new event is added. The Visitor pattern, the Acyclic Visitor pattern and the Observer pattern all failed to provide a solution. |
Definition at line 45 of file taskScheduler.cpp.
| void TaskScheduler::setBurstEnd | ( | std::shared_ptr< Event > | e | ) |
Definition at line 177 of file taskScheduler.cpp.
| void TaskScheduler::setDiscipline | ( | std::unique_ptr< SchedulingDiscipline > | discipline | ) |
Definition at line 224 of file taskScheduler.cpp.
| std::shared_ptr<Event> Scheduler::TaskScheduler::burstEnd |
Definition at line 75 of file taskScheduler.h.
| std::shared_ptr<SchedulerConfiguration> Scheduler::TaskScheduler::conf |
Definition at line 82 of file taskScheduler.h.
| unsigned int Scheduler::TaskScheduler::deadlineMisses {0} |
Definition at line 78 of file taskScheduler.h.
| Utils::Record Scheduler::TaskScheduler::deadlinesHistory |
Definition at line 79 of file taskScheduler.h.
| std::unique_ptr<SchedulingDiscipline> Scheduler::TaskScheduler::discipline |
Definition at line 72 of file taskScheduler.h.
| double Scheduler::TaskScheduler::previousTime {0.0} |
Definition at line 81 of file taskScheduler.h.
| std::shared_ptr<Process> Scheduler::TaskScheduler::runningTask {nullptr} |
Definition at line 74 of file taskScheduler.h.


In the post-nocturnal hours of evenings, as curtains are drawn and streetlamps illuminate empty blocks, someone's hitting the pavement. The nightly neighorbood menace is at again, retired from swapping Mercedes with Hyundai hovcaps (sleep sound Sunset Cliffs Blvd!) and stuffing chewing gum on bank entrance deadbolts (we'll meet again Wells Fargo).
A Year of Coding
I came across a support query to my hosting provider titled, "Background Video Won't Work". I was a complete novice, piggybacking on the Dreamweaver/SquareSpace hybrid Adobe Muse, a WYSIWYG editor, fumbling through 3rd party plug-ins to extend media functionality. A simple full-width background video loop with a heading overlay was the end goal.
Directing an Indie Film: Retrospective
In the post-nocturnal hours of evenings, as curtains are drawn and streetlamps illuminate empty blocks, someone's hitting the pavement. The nightly neighorbood menace is at again, retired from swapping Mercedes with Hyundai hovcaps (sleep sound Sunset Cliffs Blvd!) and stuffing chewing gum on bank entrance deadbolts (we'll meet again Wells Fargo).


Error!
An Error Occured Updating Your Account Info!
×Please Login. You must be logged in the Reddit Post Notifier to view and set notification preferences.
×Please Link With Reddit. You must link with Reddit to request PM notifications.
Notification Channel Info
New Post Notification Preferences For
Email
Emails will come from<EMAIL_ADDRESS>It is likely that the emails will go to your spam folder unless you add<EMAIL_ADDRESS>to your contact list.


|
SphinxBase
5prealpha
|
Hash table implementation. More...
#include <sphinxbase/sphinxbase_export.h>
#include <sphinxbase/prim_type.h>
#include <sphinxbase/glist.h>
Go to the source code of this file.
Data Structures | |
| struct | hash_entry_s |
| A note by ARCHAN at 20050510: Technically what we use is so-called "hash table with buckets" which is very nice way to deal with external hashing. More... | |
| struct | hash_table_s |
| struct | hash_iter_s |
Macros | |
| #define | hash_entry_val(e) ((e)->val) |
| Access macros. | |
| #define | hash_entry_key(e) ((e)->key) |
| #define | hash_entry_len(e) ((e)->len) |
| #define | hash_table_inuse(h) ((h)->inuse) |
| #define | hash_table_size(h) ((h)->size) |
| #define | HASH_CASE_YES 0 |
| #define | HASH_CASE_NO 1 |
| #define | hash_table_enter_int32(h, k, v) ((int32)(long)hash_table_enter((h),(k),(void *)(long)(v))) |
| Add a 32-bit integer value to a hash table. More... | |
| #define | hash_table_replace_int32(h, k, v) ((int32)(long)hash_table_replace((h),(k),(void *)(long)(v))) |
| Replace a 32-bit integer value in a hash table. More... | |
| #define | hash_table_enter_bkey_int32(h, k, l, v) ((int32)(long)hash_table_enter_bkey((h),(k),(l),(void *)(long)(v))) |
| Enter a 32-bit integer value in a hash table. More... | |
| #define | hash_table_replace_bkey_int32(h, k, l, v) ((int32)(long)hash_table_replace_bkey((h),(k),(l),(void *)(long)(v))) |
| Replace a 32-bit integer value in a hash table. More... | |
Typedefs | |
| typedef struct hash_entry_s | hash_entry_t |
| A note by ARCHAN at 20050510: Technically what we use is so-called "hash table with buckets" which is very nice way to deal with external hashing. More... | |
| typedef struct hash_table_s | hash_table_t |
| typedef struct hash_iter_s | hash_iter_t |
Functions | |
| SPHINXBASE_EXPORT hash_table_t * | hash_table_new (int32 size, int32 casearg) |
| Allocate a new hash table for a given expected size. More... | |
| SPHINXBASE_EXPORT void | hash_table_free (hash_table_t *h) |
| Free the specified hash table; the caller is responsible for freeing the key strings pointed to by the table entries. More... | |
| SPHINXBASE_EXPORT void * | hash_table_enter (hash_table_t *h, const char *key, void *val) |
| Try to add a new entry with given key and associated value to hash table h. More... | |
| SPHINXBASE_EXPORT void * | hash_table_replace (hash_table_t *h, const char *key, void *val) |
| Add a new entry with given key and value to hash table h. More... | |
| SPHINXBASE_EXPORT void * | hash_table_delete (hash_table_t *h, const char *key) |
| Delete an entry with given key and associated value to hash table h. More... | |
| SPHINXBASE_EXPORT void * | hash_table_delete_bkey (hash_table_t *h, const char *key, size_t len) |
| Like hash_table_delete, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string. More... | |
| SPHINXBASE_EXPORT void | hash_table_empty (hash_table_t *h) |
| Delete all entries from a hash_table. More... | |
| SPHINXBASE_EXPORT void * | hash_table_enter_bkey (hash_table_t *h, const char *key, size_t len, void *val) |
| Like hash_table_enter, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string. More... | |
| SPHINXBASE_EXPORT void * | hash_table_replace_bkey (hash_table_t *h, const char *key, size_t len, void *val) |
| Like hash_table_replace, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string. More... | |
| SPHINXBASE_EXPORT int32 | hash_table_lookup (hash_table_t *h, const char *key, void **val) |
| Look up a key in a hash table and optionally return the associated value. More... | |
| SPHINXBASE_EXPORT int32 | hash_table_lookup_int32 (hash_table_t *h, const char *key, int32 *val) |
| Look up a 32-bit integer value in a hash table. More... | |
| SPHINXBASE_EXPORT int32 | hash_table_lookup_bkey (hash_table_t *h, const char *key, size_t len, void **val) |
| Like hash_lookup, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string. More... | |
| SPHINXBASE_EXPORT int32 | hash_table_lookup_bkey_int32 (hash_table_t *h, const char *key, size_t len, int32 *val) |
| Look up a 32-bit integer value in a hash table. More... | |
| SPHINXBASE_EXPORT hash_iter_t * | hash_table_iter (hash_table_t *h) |
| Start iterating over key-value pairs in a hash table. | |
| SPHINXBASE_EXPORT hash_iter_t * | hash_table_iter_next (hash_iter_t *itor) |
| Get the next key-value pair in iteration. More... | |
| SPHINXBASE_EXPORT void | hash_table_iter_free (hash_iter_t *itor) |
| Delete an unfinished iterator. | |
| SPHINXBASE_EXPORT glist_t | hash_table_tolist (hash_table_t *h, int32 *count) |
| Build a glist of valid hash_entry_t pointers from the given hash table. More... | |
| SPHINXBASE_EXPORT void | hash_table_display (hash_table_t *h, int32 showkey) |
| Display a hash-with-chaining representation on the screen. More... | |
Hash table implementation.
This hash tables are intended for associating a pointer/integer "value" with a char string "key", (e.g., an ID with a word string). Subsequently, one can retrieve the value by providing the string key. (The reverse functionality–obtaining the string given the value–is not provided with the hash table module.)
Definition in file hash_table.h.
| #define hash_table_enter_bkey_int32 | ( | h, | |
| k, | |||
| l, | |||
| v | |||
| ) | ((int32)(long)hash_table_enter_bkey((h),(k),(l),(void *)(long)(v))) |
Enter a 32-bit integer value in a hash table.
This macro is the clean way to do this and avoid compiler warnings on 64-bit platforms.
Definition at line 315 of file hash_table.h.
| #define hash_table_enter_int32 | ( | h, | |
| k, | |||
| v | |||
| ) | ((int32)(long)hash_table_enter((h),(k),(void *)(long)(v))) |
Add a 32-bit integer value to a hash table.
This macro is the clean way to do this and avoid compiler warnings on 64-bit platforms.
Definition at line 228 of file hash_table.h.
| #define hash_table_replace_bkey_int32 | ( | h, | |
| k, | |||
| l, | |||
| v | |||
| ) | ((int32)(long)hash_table_replace_bkey((h),(k),(l),(void *)(long)(v))) |
Replace a 32-bit integer value in a hash table.
This macro is the clean way to do this and avoid compiler warnings on 64-bit platforms.
Definition at line 338 of file hash_table.h.
| #define hash_table_replace_int32 | ( | h, | |
| k, | |||
| v | |||
| ) | ((int32)(long)hash_table_replace((h),(k),(void *)(long)(v))) |
Replace a 32-bit integer value in a hash table.
This macro is the clean way to do this and avoid compiler warnings on 64-bit platforms.
Definition at line 257 of file hash_table.h.
| typedef struct hash_entry_s hash_entry_t |
A note by ARCHAN at 20050510: Technically what we use is so-called "hash table with buckets" which is very nice way to deal with external hashing.
There are definitely better ways to do internal hashing (i.e. when everything is stored in the memory.) In Sphinx 3, this is a reasonable practice because hash table is only used in lookup in initialization or in lookups which is not critical for speed. Another note by ARCHAN at 20050703: To use this data structure properly, it is very important to realize that the users are required to handle memory allocation of the C-style keys. The hash table will not make a copy of the memory allocated for any of the C-style key. It will not allocate memory for it. It will not delete memory for it. As a result, the following code sniplet will cause memory leak.
while (1){ str=(char*)ckd_calloc(str_length,sizeof(char*)) if(hash_enter(ht,str,id)!=id){ printf("fail to add key str %s with val id %d\n",str,id)} } A note by dhuggins on 20061010: Changed this to use void * instead of int32 as the value type, so that arbitrary objects can be inserted into a hash table (in a way that won't crash on 64-bit machines ;) The hash table structures. Each hash table is identified by a hash_table_t structure. hash_table_t.table is pre-allocated for a user-controlled max size, and is initially empty. As new entries are created (using hash_enter()), the empty entries get filled. If multiple keys hash to the same entry, new entries are allocated and linked together in a linear list.
| SPHINXBASE_EXPORT void* hash_table_delete | ( | hash_table_t * | h, |
| const char * | key | ||
| ) |
Delete an entry with given key and associated value to hash table h.
Return the value associated with the key (NULL if it did not exist)
| h | In: Handle of hash table in which a key will be deleted |
| key | In: C-style NULL-terminated key string for the new entry |
Definition at line 523 of file hash_table.c.
| SPHINXBASE_EXPORT void* hash_table_delete_bkey | ( | hash_table_t * | h, |
| const char * | key, | ||
| size_t | len | ||
| ) |
Like hash_table_delete, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string.
So the key string is a binary key (or bkey). Hash tables containing such keys should be created with the HASH_CASE_YES option. Otherwise, the results are unpredictable.
| h | In: Handle of hash table in which a key will be deleted |
| key | In: C-style NULL-terminated key string for the new entry |
Definition at line 561 of file hash_table.c.
| SPHINXBASE_EXPORT void hash_table_display | ( | hash_table_t * | h, |
| int32 | showkey | ||
| ) |
Display a hash-with-chaining representation on the screen.
Currently, it will only works for situation where hash_enter was used to enter the keys.
| h | In: Hash table to display |
| showkey | In: Show the string or not, Use 0 if hash_enter_bkey was used. |
Definition at line 574 of file hash_table.c.
References hash_table_s::size.
| SPHINXBASE_EXPORT void hash_table_empty | ( | hash_table_t * | h | ) |
Delete all entries from a hash_table.
| h | In: Handle of hash table |
Definition at line 483 of file hash_table.c.
References ckd_free(), hash_table_s::inuse, hash_entry_s::next, and hash_table_s::size.
| SPHINXBASE_EXPORT void* hash_table_enter | ( | hash_table_t * | h, |
| const char * | key, | ||
| void * | val | ||
| ) |
Try to add a new entry with given key and associated value to hash table h.
If key doesn't already exist in hash table, the addition is successful, and the return value is val. But if key already exists, return its existing associated value. (The hash table is unchanged; it is up to the caller to resolve the conflict.)
| h | In: Handle of hash table in which to create entry |
| key | In: C-style NULL-terminated key string for the new entry |
| val | In: Value to be associated with above key |
Definition at line 501 of file hash_table.c.
Referenced by cmd_ln_set_str_extra_r().
| SPHINXBASE_EXPORT void* hash_table_enter_bkey | ( | hash_table_t * | h, |
| const char * | key, | ||
| size_t | len, | ||
| void * | val | ||
| ) |
Like hash_table_enter, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string.
So the key string is a binary key (or bkey). Hash tables containing such keys should be created with the HASH_CASE_YES option. Otherwise, the results are unpredictable.
| h | In: Handle of hash table in which to create entry |
| key | In: Key buffer |
| len | In: Length of above key buffer |
| val | In: Value to be associated with above key |
Definition at line 535 of file hash_table.c.
| SPHINXBASE_EXPORT void hash_table_free | ( | hash_table_t * | h | ) |
Free the specified hash table; the caller is responsible for freeing the key strings pointed to by the table entries.
| h | In: Handle of hash table to free |
Definition at line 688 of file hash_table.c.
| SPHINXBASE_EXPORT hash_iter_t* hash_table_iter_next | ( | hash_iter_t * | itor | ) |
Get the next key-value pair in iteration.
This function automatically frees the iterator object upon reaching the final entry.
Definition at line 656 of file hash_table.c.
References hash_iter_s::ent, and hash_entry_s::next.
Referenced by hash_table_iter().
| SPHINXBASE_EXPORT int32 hash_table_lookup | ( | hash_table_t * | h, |
| const char * | key, | ||
| void ** | val | ||
| ) |
Look up a key in a hash table and optionally return the associated value.
| h | In: Handle of hash table being searched |
| key | In: C-style NULL-terminated string whose value is sought |
| val | Out: *val = value associated with key. If this is NULL, no value will be returned. |
Definition at line 302 of file hash_table.c.
References hash_entry_s::val.
Referenced by cmd_ln_access_r(), cmd_ln_set_str_extra_r(), and hash_table_lookup_int32().
| SPHINXBASE_EXPORT int32 hash_table_lookup_bkey | ( | hash_table_t * | h, |
| const char * | key, | ||
| size_t | len, | ||
| void ** | val | ||
| ) |
Like hash_lookup, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string.
So the key string is a binary key (or bkey). Hash tables containing such keys should be created with the HASH_CASE_YES option. Otherwise, the results are unpredictable.
| h | In: Handle of hash table being searched |
| key | In: Key buffer |
| len | In: Length of above key buffer |
| val | Out: *val = value associated with key. If this is NULL, no value will be returned. |
Definition at line 337 of file hash_table.c.
Referenced by hash_table_lookup_bkey_int32().
| SPHINXBASE_EXPORT int32 hash_table_lookup_bkey_int32 | ( | hash_table_t * | h, |
| const char * | key, | ||
| size_t | len, | ||
| int32 * | val | ||
| ) |
Look up a 32-bit integer value in a hash table.
This function is the clean way to do this and avoid compiler warnings on 64-bit platforms.
| h | In: Handle of hash table being searched |
| key | In: Key buffer |
| len | In: Length of above key buffer |
| val | Out: *val = value associated with key. If this is NULL, no value will be returned. |
Definition at line 358 of file hash_table.c.
References hash_table_lookup_bkey().
| SPHINXBASE_EXPORT int32 hash_table_lookup_int32 | ( | hash_table_t * | h, |
| const char * | key, | ||
| int32 * | val | ||
| ) |
Look up a 32-bit integer value in a hash table.
This function is the clean way to do this and avoid compiler warnings on 64-bit platforms.
| h | In: Handle of hash table being searched |
| key | In: C-style NULL-terminated string whose value is sought |
| val | Out: *val = value associated with key. If this is NULL, no value will be returned. |
Definition at line 322 of file hash_table.c.
References hash_table_lookup().
Referenced by ngram_unknown_wid(), and ngram_wid().
| SPHINXBASE_EXPORT hash_table_t* hash_table_new | ( | int32 | size, |
| int32 | casearg | ||
| ) |
Allocate a new hash table for a given expected size.
| size | In: Expected number of entries in the table |
| casearg | In: Whether case insensitive for key comparisons. When 1, case is insentitive, 0, case is sensitive. |
Definition at line 158 of file hash_table.c.
References ckd_calloc, hash_table_s::nocase, and hash_table_s::size.
Referenced by jsgf_grammar_new().
| SPHINXBASE_EXPORT void* hash_table_replace | ( | hash_table_t * | h, |
| const char * | key, | ||
| void * | val | ||
| ) |
Add a new entry with given key and value to hash table h.
If the key already exists, its value is replaced with the given value, and the previous value is returned, otherwise val is returned.
A very important but subtle point: The key pointer in the hash table is replaced with the pointer passed to this function. In general you should always pass a pointer to hash_table_enter() whose lifetime matches or exceeds that of the hash table. In some rare cases it is convenient to initially enter a value with a short-lived key, then later replace that with a long-lived one. This behaviour allows this to happen.
| h | In: Handle of hash table in which to create entry |
| key | In: C-style NULL-terminated key string for the new entry |
| val | In: Value to be associated with above key |
Definition at line 512 of file hash_table.c.
| SPHINXBASE_EXPORT void* hash_table_replace_bkey | ( | hash_table_t * | h, |
| const char * | key, | ||
| size_t | len, | ||
| void * | val | ||
| ) |
Like hash_table_replace, but with an explicitly specified key length, instead of a NULL-terminated, C-style key string.
So the key string is a binary key (or bkey). Hash tables containing such keys should be created with the HASH_CASE_YES option. Otherwise, the results are unpredictable.
| h | In: Handle of hash table in which to create entry |
| key | In: Key buffer |
| len | In: Length of above key buffer |
| val | In: Value to be associated with above key |
Definition at line 548 of file hash_table.c.
| SPHINXBASE_EXPORT glist_t hash_table_tolist | ( | hash_table_t * | h, |
| int32 * | count | ||
| ) |
Build a glist of valid hash_entry_t pointers from the given hash table.
Return the list.
| h | In: Hash table from which list is to be generated |
| count | Out: Number of entries in the list. If this is NULL, no count will be returned. |
Definition at line 616 of file hash_table.c.


Hi, my name is
I'm a Boston-based software engineer who specializes in building (and occasionally designing) exceptional digital experiences. Currently, I'm an engineer at Upstatement focused on building accessible, human-centered products.
Get In Touch01. About Me
Hello! My name is Fakhridin and I enjoy creating things that live on the internet. My interest in web development started back in 2012 when I decided to try editing custom Tumblr themes — turns out hacking together a custom reblog button taught me a lot about HTML & CSS!
Fast-forward to today, and I've had the privilege of working at an advertising agency, a start-up, a huge corporation, and a student-led design studio. My main focus these days is building accessible, inclusive products and digital experiences at Upstatement for a variety of clients.
Here are a few technologies I've been working with recently:
JavaScript (ES7+)
React
HTML
CSS
SASS
GIT
02. Some Things I’ve Built