Table of Contents
- Motivation
- Anatomy of a dev environment
- A better way to do dotfiles - Dotbot
- Combining everything together
- Pick a host. GitHub Codespaces
- Example
- Summary
- Reference
Motivation
Crafting a perfect dev environment takes time and effort. It is a tedious process that you have to do every time you change a working environment. For example, you buy a new laptop, switch to another operating system, or switch to a new project that requires extra tools and configuration. The latter case is interesting to me because I like to try out new things. Varying from different tools, and frameworks to new programming languages.
There are lots of benefits to making a reproducible dev environment. For me the two main ones:
- You open a project and it just works. Image some open-source project that interests you but you don’t know how to even run it. With DEaaC the installation problems go away.
- You can share it with your peers. A codified developer setup is a form of knowledge that could be evaluated and evolved. It opens up tons of new opportunities.
Anatomy of a dev environment
Basically, you can divide aspects of a dev environment into next categories:
It might seem like a lot but luckily we have good tools to automate the scaffolding process. Namely dotfiles and devcontainers.
Dotfiles
Dotfiles are focused on personal configuration aspects and are usually maintained by a person. Dotfiles are tailored to make up a unique developer experience. Previously, I wrote about it here: Development environment based on Windows Terminal + WSL + ZSH + dotfiles
Usually, dotfiles are comprised of common configurations and utilities that could be used on various different platforms and platform-specific configurations. For example, you use a specific package manager innate into the system to install dependencies.
Here is an example of how I do it: https://github.com/NikiforovAll/dotfiles. As you can see, there are three different setups for windows
, wsl
, and dev-containers
.
As result, we can create a dev environment of choice from a scratch. All you need to do is to run one-liner:
bash -c "$(wget -qO - https://raw.github.com/nikiforovall/dotfiles/master/src/wsl/os/install.sh)"
An approach like this does work. But it is annoying and impractical. We can do better about it. I will show you in a moment.
DevContainers
From the official documentation:
The Visual Studio Code Remote - Containers extension lets you use a Docker container as a full-featured development environment. It allows you to open any folder or repository inside a container and take advantage of Visual Studio Code’s full feature set. A devcontainer.json file in your project tells VS Code how to access (or create) a development container with a well-defined tool and runtime stack. This container can be used to run an application or to separate tools, libraries, or runtimes needed for working with a codebase.
A devcontainer.json file in your project tells Visual Studio Code (and other services and tools that support the format) how to access (or create) a development container with a well-defined tool and runtime stack. It’s currently supported by the Remote - Containers extension and GitHub Codespaces.
DevContainers are meant to be reusable and extendable. From my experience, they have improved in this regard. Here is how you can add dependencies via .devconatiner.json
{
"name": "Azure Dev CLI",
"build": {
"dockerfile": "Dockerfile", // base docker image
"args": {
"VARIANT": "bullseye" // parametrization
}
},
"features": {
"github-cli": "2",
"azure-cli": "2.38",
"dotnet": "6.0",
"docker-from-docker": "20.10",
},
"extensions": [
"ms-azuretools.azure-dev",
"ms-azuretools.vscode-bicep",
"ms-azuretools.vscode-docker",
"ms-azuretools.vscode-azurefunctions",
"ms-dotnettools.csharp",
"ms-dotnettools.vscode-dotnet-runtime",
],
}
💡DevContainers define project-specific configurations and dotfiles define user-specific configurations.
A better way to do dotfiles - Dotbot
💭 My initial version of dotfiles was intended for wsl & early devcontainers version. Since then, I’ve learned a couple of lessons. Mainly, it is a good idea to keep dotfiles simple and rely on essentials. You don’t need to bring tons of dependencies and convoluted configuration files. The simpler - the easier to maintain and synchronize.
So, I’ve created another dotfiles repo: https://github.com/NikiforovAll/dotbot. This one is based on https://github.com/anishathalye/dotbot. Dotbot is a tool that bootstraps your dotfiles. It is straightforward and easy to use.
As discussed, since I deliberately choose to not have heavy dependencies it takes a couple a seconds to install dotfiles. Exactly as I want it to be. My general suggestion is to move the heavy lifting of dependencies installation to DevContainers.
One-liner: cd ~ && git clone https://github.com/NikiforovAll/dotbot && cd ./dotbot && cd ./install
Here is how the project structure looks like:
# oleksii_nikiforov in ~/dotbot
> tree -L 2
.
├── bash
│ ├── plugins.bash
│ └── prompt.bash
├── bash_profile
├── bashrc
├── gitconfig
├── gitignore_global
├── install
├── install.conf.yaml
├── pre-install.sh
├── shell
│ ├── aliases.sh
│ ├── bootstrap.sh
│ ├── dircolors.extra
│ ├── external.sh
│ ├── functions.sh
│ └── plugins
├── zsh
│ ├── plugins
│ ├── plugins_after.zsh
│ ├── plugins_before.zsh
│ ├── prompt.zsh
│ └── settings.zsh
└── zshrc
Combining everything together
The resulting dev environment is combined from diverse sources. Roughly speaking a host (developer machine/codespace) is composed of the next pieces:
Pick a host. GitHub Codespaces
The suggested approach abstracts away the host. It doesn’t necessarily has to be your own machine. This is what “GitHub Codespaces” product is about.
A codespace is a development environment that’s hosted in the cloud. You can customize your project for GitHub Codespaces by committing configuration files to your repository (often known as Configuration-as-Code), which creates a repeatable codespace configuration for all users of your project.
GitHub Codespaces run on a variety of VM-based compute options hosted by GitHub.com, which you can configure from 2 core machines up to 32 core machines. You can connect to your codespaces from the browser or locally using Visual Studio Code.
Example
We will examine Azure Developer CLI (azd
) template - todo-csharp-cosmos-sql. Here is a repo that will be used as an example: https://github.com/NikiforovAll/todo-csharp-cosmos-sql.
The end goal is to setup a full-featured dev environment and measure how much time it takes.
This application utilizes the following Azure resources:
- Azure App Services to host the Web frontend and API backend
- Azure Cosmos DB SQL API for storage
- Azure Monitor for monitoring and logging
- Azure Key Vault for securing secrets
The demo combines techniquest from both Infrastructure as a Code (IaaC) and Dev Environment as a Code (DEaaC). It takes only 15 stagering minutes from zero to deployed azure resources on the first launch.
1⃣ Configure dotfiles in “Settings>Codespaces”:
2⃣ Go to repository and launch a codespace:
3⃣ Open the codespace in the browser or locally (I will go with browser option for the demo)
4⃣ Login to Azure via CLI or VSCode extension:
az login --use-device-code
5⃣ Run azd up
6⃣ Setup the breakpoint
7⃣ Inspect forwarded ports. Note, codespaces allocates some random URL
8⃣ Generate load
9⃣ Inspect logs by running azd monitor --logs
🔟 Tear down the dev environment in Azure azd down
As result we have:
- Deployed whole developer setup in 15 minutes
- Terminal/Shell is configured
- Git is configured
- All project tooling and dependencies are installed:
dotnet
,az
, etc. - VSCode contains user extensions as well as suggested by devcontainer
- A one happy developer 😉
Summary
DEaaS has lots of advantages. Most of the time it just works. But it definitely required investing some time to learn about the moving parts to know how to maintain and troubleshoot the setup. I have not shown you the dark side of using DevContainers but I can assure you that it could be hard to understand when something goes wrong. Despite all challenges, it opens new horizons and it is a future of large-scale and open-source development.
Reference
- https://dotfiles.github.io
- https://nikiforovall.github.io/productivity/2019/11/30/nikiforovall-setup.html
- https://code.visualstudio.com/docs/remote/create-dev-container
- https://docs.github.com/en/codespaces/overview
- https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/introduction-to-dev-containers
- https://docs.github.com/en/codespaces/customizing-your-codespace/personalizing-github-codespaces-for-your-account


Demo ‚ConnectionDefs’
Illustrate the different ways, how a connection
can be defined.
Property
‘ConnectionDefFileAutoLoad’
Loading the
ConnectionDefFile automatically when a connection definition is the first time
used.
ADManager.ConnectionDefFileAutoLoad:= True;
Property
‘ConnectionDefFileLoaded’
Using ConnectionDefFileLoaded property to check if connection definition file is loaded.
if not ADManager.ConnectionDefFileLoaded then
…
a.)
Create
connection definition on fly
Create/ Add Connection Definition:
with ADManager.ConnectionDefs.AddConnectionDef do
begin
Name
:= 'MyDefNew';
DriverID := 'MSAcc';
Database := '$(DEHOME)\DB\Data\DEDemo.mdb'; // using properties
Params.Add('Tracing=True'); // using Params
AsBoolean['ReadOnly'] := True; // using AsXXX properties
//
mark persistent to save this connection definition to file later
MarkPersistent;
end;
// to make new definition persistent call
following:
ADManager.ConnectionDefs.Save;
Connect to RDBMS:
DEConnection1.Connected:= True;
Delete Connection Definition:
if ADManager.ConnectionDefs.FindConnectionDef(‘MyDef’)
<> nil then
ADManager.ConnectionDefs.ConnectionDefByName(‘MyDef’).Delete;
b.)
Load
connection definition file
Load ‘Connection Definition File’ explicitly with the method
‘LoadConnectionDefFile’
ADManager.ConnectionDefFileAutoLoad := False;
ADManager.LoadConnectionDefFile;
The file is searched by default beside the application (in the same path). If the one is not found it takes the location of the ‘Connection Definition File’ from the registry.
c.)
Set
connection definition file name explicitly (with/ without path)
Explicitly setting the ConnectionDef file name, this file will be searched beginning the path of your application.
ADManager.ConnectionDefFileName := 'MyTest.ini’;
d.)
Add
connection definition
It’s like point a). The difference is that you
may create connection definition after loading other connection defs from file.
e.)
Clone
Connection definition.
procedure ...
var
oConnectionDef: IDEStanConnectionDef;
begin
oConnectionDef :=
ADManager.ConnectionDefs.ConnectionDefByName(‘MyDef’);
with
ADManager.ConnectionDefs.AddConnectionDef do begin
Name := ‘NewDef’;
// Clone connection definition assigning
the parameters
Params.AddStrings(oConnectionDef.Params);
end;
end;
f.)
Forcing
errors like...
·
Generate
connection definitions with the same name (not allowed)
·
A
‘on-fly’ connection was created and a user like to read connections from a
connection definition file.


-
On ‘Dark Talent’, MOOCs, Universities, and Startups: An Interview with the ...
a16z.com
We’re bringing together a great group of computer science professors from around the U.S. for talks and discussion as part of our second annual ...
-
OpenGov: The Startup Analyzing $50B in Spending | Andreessen Horowitz
a16z.com
“A billion here, a billion there, and pretty soon you’re talking real money!” — attributed to Fmr. Sen. Everett Dirksen
-
How to Start a Startup
startupclass.samaltman.com
CS183B is a class we’re teaching at Stanford. It’s designed to be a sort of one-class business course for people who want to start startups.
-
Venture Capitalist Sounds Alarm on Startup Investing
online.wsj.com
Silicon Valley may have taken on more risk than it can handle, according to prominent venture capitalist Bill Gurley, who cited potential cracks in ...
-
Zero to One: Notes on Startups, or How to Build the Future:Amazon:Books
www.amazon.com
Amazon Zero to One: Notes on Startups, or How to Build the Future
-
Peter Thiel, technology entrepreneur and investor. AMA • /r/IAmA
www.reddit.com
**My short bio:** Hi, I'm Peter Thiel, co-founder of PayPal and Palantir, first investor in Facebook, venture capitalist at Founders Fund, and...
-
Stripe: Apple Pay
stripe.com
Stripe is a suite of APIs that powers commerce for businesses of all sizes.
-
B Horowitz’s annotation of “You may still fail. The outcome is something ...
tech.genius.com
This is a good way to look at it from a psychological standpoint, because there are definitely no guarantees no matter how well you execute. Having ...
-
The Coin Center – AVC
avc.com
We have found that the best way to deal with policy makers and regulators when something new and threatening and dangerous looking comes around is to ...
-
B Horowitz – The Legend of The Blind MC
news.genius.com
Ben almost always starts his blog posts with a quote from a rap song or artist. A lot of people have accused him of using it as a gimmick or ...
-
Racism Masked as Sarcasm: An Open Letter to ValleyWag
raprehab.com
Racism comes in many forms. Sometimes it's blatant and in-your-face, other times, it's nuanced and cloaked in sarcasm, like ValleyWag's latest ...
-
Requests for Startups
www.ycombinator.com
You shouldn't start a company just because it's on this list. 1. It’s mostly here to help stimulate you to think about ideas.
-
2014 Beauty Breakthroughs
www.allure.com
A potion that makes eye bags disappear. A lotion that makes you look younger in minutes. Self-tanner that delivers the shade you want on command. ...
-
Felicia Horowitz: We're All In This Life Together
vimeo.com
June 25, 2014 --- GLIDE hosted A GLIDE Talk with Ben Horowitz and Lars Dalgaard as two giants from Andreessen Horowitz discussed Horowitz's ...
-
Early stages of long bull market in tech: Pro
video.cnbc.com
Scott Kupor, Andreessen Horowitz, shares his outlook on the tech space.
-
U.S. economy grew at fastest pace in 2Q in 2-1/2 years
video.foxbusiness.com
PNC Wealth Management chief investment strategist Bill Stone and Holland & Company chairman Mike Holland discuss the state of the economy.
-
Apple’s IPhone Software Snafu Has Links to Flawed Maps - Bloomberg
www.bloomberg.com
Apple’s IPhone Software Snafu Has Links to Flawed Maps
-
New $140 Million Early-Stage Fund Launched in Europe Called Mosaic Ventures
recode.net
Three well-known tech investors and execs announced today that they had launched Mosaic Ventures, a new $140 million fund aimed at early-stage ...
-
Occupational Hazards of Working on Wall Street
www.bloombergview.com
Michael Lewis asks the big question about the army of Ivy League graduates, with seemingly endless career options, who wind up in finance: What ...
-
Is using Stripe in my iOS app within Apple’s Terms of Service? Will I need ...
support.stripe.com
Common searches: recurring payments , transfers , and refunds
-
Troy Hunt: Everything you need to know about the Shellshock Bash bug
www.troyhunt.com
Observations, musings and conjecture about the world of software and technology
-
Is the App Ecosystem Sustainable? | Tech.pinions - Perspective, Insight, ...
techpinions.com
The focus on mobility and mobile platforms as the growth engines for the tech industry’s future is now so engrained into most people’s heads that it ...
-
Shonda Rhimes
www.makers.com
Stay up to date with the latest from MAKERS delivered straight to your inbox. Sign up for new stories from trailblazing women, a big dose of ...
-
How India Mounted the World’s Cheapest Mission to Mars
blogs.wsj.com
India has become the only nation so far to reach Mars on its first attempt. It will also have spent the least amount of money to do so.
-
Medicine 2064 with Dr. Daniel Kraft
www.youtube.com
Curing half of the world's known cancers, granting movement to the paralyzed, preventing Alzheimer's. Visionary medical expert Dr. Daniel Kraft ...


$def with (profile, userinfo, relationship, feature, result)
$ _GRID_ITEM = COMPILE("common/thumbnail_grid_item.html")
$:{RENDER("common/user_tools.html", [profile, userinfo, relationship])}
$:{RENDER("common/user_tabs.html", [profile['username'], "favorites", profile['show_favorites_tab']])}
$if(feature in ["submit", "char", "journal"]):
$if(feature == "submit"):
Favorite Submissions
$elif(feature == "char"):
Favorite Characters
$else:
Favorite Journals
$if result.query:
$for index, item in enumerate(result.query):
$:{_GRID_ITEM(item, lazy_load=index >= 10)}
$:{RENDER("common/page_navigation.html", [result])}
$else:
There are no favorites to display; you may wish to check this user's
favorites summary page.
$else:
$if(result['submit'] or result['char'] or result['journal']):
$if(result['char']):
Favorite Characters
$for i in result['char']:
$:{_GRID_ITEM(i, lazy_load=False)}
- More Characters
$if(result['submit']):
Favorite Submissions
$if(result['journal']):
Favorite Journals
$for i in result['journal']:
$:{_GRID_ITEM(i, lazy_load=False)}
- More Journals
$else:
Favorites
There are no favorites to display.


This post is a follow-up to Developing A .NET Core Site In Windows and Deploying It To A Budget Linux Host. Be sure to check it out for more information on my current production deployment process.
In this post, I will continue with the "budget" theme we explored in " Developing A .NET Core Site In Windows and Deploying It To A Budget Linux Host" and breakdown where and how I host my database, email services, dedicated production VM and dedicated dev shared hosting environment for Pioneer Code. Oh yeah, did I mention that I do this all for as low as $7.95 a month!
Prior to migrating from ASP.NET 4.6.x to ASP.NET Core 1.x, I hosted Pioneer Code on a shared hosting plan at WinHost. When I switched over to ASP.NET Core I wanted a bit more control of my environment which lead me down the path of finding a Linux Hosted VM provider. Keeping the "budget" them in mind, I chose DigitalOcean. Their base "droplet (VM)" comes in at $5.00 a month and can be scaled as needed. Can't get much cheaper than that and if you're curious, their service so far has been stellar.
For more information on my entire deployment process to DigitalOcean, be sure to check out the first part of this post at Developing A .NET Core Site In Windows and Deploying It To A Budget Linux Host.
What about your database? What about your email services? Well, that is where WinHost steps in. Having dealt with them for over a year with no problems and comparing dollar for dollar against other Windows shared hosting companies, I found little reason not to continue using them to fill in the gaps. Oh, and guess what? I am doing so for $3.95 a month.
Naturally, though not necessary, Pioneer Code is backed by a SQL Server database. To be more specific, SQL Server 2016. This left me with few options.
In short, I am hosting my production database at WinHost and accessing it through my DigitalOcean VM.
WinHost servers appear to be on the west coast. Obviously, there is a desire to get your SQL Server as close to your Web Server as possible. Luckily DigitalOcean allows you to select from a number regions to host your "droplets (VM)). Meaning, in theory, I was able to get my database and web server "relatively" close to each other.
The $3.95 base plan WinHost offers also covers my email services. As a bonus, I also get to use the shared hosting service include for whatever I want. Currently, I am using it as a development deployment for various projects, but there is nothing to stop me from using it for another small production deployment.
Let's do a small recap.
All that for $8.95 a month! If that is not "budget friendly", I don't know what is.
My goals when choosing my deployment stack where simple, do it for as cheap as I can while maintaining a decent level of quality. Of which I think accomplished. That being said, I am not delusional. If Pioneer Code starts gaining significant traffic, my deployment stack might have to be adjusted to suit those needs. Until then, I am perfectly happy with where I am at.
As always, let me know if you have any question in the comments section below.


Adam Kinney seems to be that rare combination of graphic designer and coder that I want to be to survive in the brave new world of Longhorn. I'm following his blog avidly.


Enable colors in the Project tool window and in search results (for example, in the Find in Path dialog Ctrl+Shift+F).


My name is Elvo Kibet
I am Mobile Developer
Web Developer
A forward thinking developer with experience in building, testing, intergrating and supporting android applications for high-end mobile devices.
Responsive Design
This is to improve user experience and accommodate everyone, whether they are on a desktop, tablet or smartphone.
Clean Coding
As a designer and developer, I understand the perfect user interface should look good and work even better. Alongside my clients, I uncover problems and solve them. In short, I create bolder online experiences.
A successful website
This is a driving force behind increasing sales and your company's ROI. One component of a successful website is the way it looks.


URL, Inc.


Australian States coloured by Awesomeness
I've done this page for a few reasons:
I wanted to see a d3 map using json maps that showed something other than the USA
I wanted to use colour ranges


Graphic Designer by day... Software Developer by night...
I am an optimistic, growth and detail-oriented software developer with skills in the front and backend. Working as a graphic designer, I am driven and inspired by web interfaces and have a passion for creating meaningful, immersive and responsive web applications. I am always eager to learn new ideas and enjoy problem solving, and am dedicated to showcasing a positive attitude in a team environment.
When I'm not coding, you can find me exploring knitting or crocheting patterns, watching Korean drama television shows, or trying out new cooking and baking recipes.


THE DEEP END OF THE OCEAN (M). (Columbia/Manadaly/Village Roadshow) Director: Ulu Grosbard Stars: Michelle Pfeiffer, Treat Williams, Whoopi Goldberg, Jonathan Jackson, Ryan Merriman, John Kapelos, Cory Buck, Alexa Vega, Michael McGrady, Tony Musante Running time: 108 minutes.
Writer Stephen Schiff (Lolita, the recent True Crime, etc) has done a good job of adapting Jacquelyn Mitchard's best-selling novel for the screen, and he turns the film into a compelling study of the psychological damage a family can inflict upon itself under times of great emotional stress.
The film opens in 1988, when photographer Beth Cappadora (Michelle Pfeiffer) heads off to a school reunion in Chicago with her three young children in tow. In the hotel lobby though her son Ben mysteriously disappears. Despite an intense police search and investigation, the boy is never found.
Nine years later, the family has got on with their lives, although the tensions, guilt and doubts are still simmering away just beneath the surface. The Cappadoras have permanently moved to Chicago, where Pat (Treat Williams, from The Prince Of The City, etc) has opened a restaurant with his father and Beth has re-established her career as a photographer. Then one day a boy knocks on their door, offering to cut their lawn. Beth immediately recognises him as Ben.
At first, The Deep End Of the Ocean's premise reads a little like that of Olivier, Olivier, the 1993 French film in which a teenage hustler tries to convince a family that he is their missing son. However, in this solid and touching drama, the twist is the boy is really the Cappadora's missing son. Ben, or Sam as he is now known, has been raised by his adoptive father George (John Kapelos), who was unaware of his origins.
Sam's return brings with it a whole new set of complications, and the emotional ripples further threaten the family. Sam's presence also begins the healing process between Beth and her strangely disturbed teenage son Vincent (Jonathan Jackson, a star of tv soap General Hospital), who is consumed by his own guilty secrets.
Another intriguing aspect of the film is the way in which the characters have changed during the decade. The only member of the family who seems unaffected by these events is daughter Kerry (Alexa Vega), who is given little screen time anyway.
Pfeiffer delivers an unusually strong and emotionally demanding performance as Beth, who grows stronger and more confident and controlled. Jackson is excellent as Vincent, while Williams is also surprisingly good as he portrays Pat's slow disintegration. Whoopi Goldberg brings unusual restraint to her smaller role as a sympathetic detective who befriends the Cappadora family.
Hailing from a theatrical background, Ulu Grosbard is a director known for his solid character driven films (Straight Time, Georgia, etc), and he brings a deep emotional resonance to this study of a family in crisis. He explores this emotionally complex and rich material without becoming too manipulative, and keeps the mood deliberately restrained and understated. While Grosbard effectively pushes a number of buttons, The Deep End Of The Ocean is never quite the tear jerker that it could have been.
*** greg king http://www.netau.com.au/gregking
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


I was born in Tehran,Iran.I passed my primary eduction there.Then,for some reason,I came to Guilan province and spent my education in Lahijan city in the schools of science and knowledge.I went to high school and pre-University in Rasht city, at school of noble thoughts. I'm currently studying Computer Engineering-Software at the University of Guilan.


Welcome Back!!!!!
prompt and alert donow
head or tails game
story game
random math game
morse code translator
helloworld alert exercise
Rock, Paper, Scissors game
Homework week 1 P2
madlib
homemade weather site


This section is about the critical points of our project, including User Experience, functionality, stability and efficiency. We will discuss all about the details of our project in that section for future development and anyone have interest in.
The user experience is quite good since we have a really nice design of the web application, including the UI, the page layout and the color scheme. However the speed of the posture recognition is too slow which makes people misunderstand it is working not shut down. We should including a notification said that 'please go and grab a cofffee then come back to see th results'.
Also, for the item recognition, the notation of the items detected by the system flash quickly which makes hard to catch up with. The problem is that the item recognition cannot work for every frames, so it flash once by five or more frames going through. That is a problem of the API, it cannot read video but only images.
These user experiecne feed back is important to our project. We will fix it if we have time in the future.
There are three recognitions has been implemented with our project. They are posture recognition, item recognition and face recognition. Posture recognition detecting people's posture including sitting, standing and lying down. Face recognition recognise the people within the frames. Item recognition outline the top5 the most significant items within the frame with name and confidence rate.
The input form can be video uploading by azure virtual system, or live-stream input through web camera by the local flask web server.
If the uploading video is too long, the recognition system will shut down since the web browser cannot wait for few minutes long response, it is caused by the natural of web server application, they have a maximum responsing time, if the back-end system took too long to return the response, it will lost connection and ask the user to refresh the page. We have not fond a efficient way to fix that problem, however if we are using the live stram on local to play the AI recognition, there won't be any problem with the responsing time since it continuously keep connecting and disconnecting, response with one analysis frame at each time.
We choose a ten-second video to test for the item and face recognition. There are two people including in the video with one person has a small knives held by hand. We found the face has been nicely detected three time per second accurately within the range of 3 meters and the deadly (small knives) never been recognised when it is 5 meters away from the camera. It shows that how the AI CCTV far away from the real-world application at the moment.
At the moment, only Edge and FireFox are able to access the webcam for the webapp. In order to improve this compatibility, it can be solved by having an DNS for this webapp and get a SSL certificate as well. So that the website will be accessed via HTTPS, so that all the web-browser we tested can access the webcam due to the restriction from the JS library.
From our application, there are few components we have to look after in order to maintain the system.
Firstly, Google cloud vision API requires money to run, it is free for the first 1000 image analysis, after that it requires you to pay $1.5 for 1001 to 5,000,000 units, more details are in cloud.google.com/vision/pricing.
Secondly, The AzureVM running NC6 requires around £0.9 per hour, and we have to make sure that we have enough budgets in our Azure account It is recommended that you start the machine when you need it and stop the machine when you dont need it.
At the start, we splited the tasks and roles for this project. Due to the main objective for this project is to develop the AI of the CCTV, we decided to let everyone get involved with the AI part. Therefore, We decided that Andreas to be working on the frontend, posture sample gathering and communication with the client, Shun to be working on the Face and Item recognition and Shiko to work on the deployment, system integration and Posture Recognition.
We are happy with our work and the progress of our work, comparing with other group, we took more times than other group to combine backend and frontend together. This is due to the complexity and the difficulty of our project. In order to test and finish our application, we had to work with server, image recognition and the pipeline between the frontend and the backend and we have to let each member to know each part of the application inside out.
The difficulty of the management part of this project is managing the time and the workload of integrating the frontend and the backend of the application while you are configuring the image recognition. The image recognition that we built is not something like API that we can use it straight away, we had to create the pipeline to go through image data extraction, datasets and model creation and improve the accuracy on the image recognition. We solved this issue by putting vast majority of time and testing each component to speed up the development progress.
Further develop the current web application in Azure which can allow the user to input the images sample and then create the model using Multi Layer Perception classifier in order to achieve machine learning by using their own samples. Finally, the user then can select the model they generated to process the image recognition. In the current stage, since the item recognition is using Google Vision API, this functionality is only capable for face and posture recognition. The ultimate goal for this part is having login authentication features to allow multiple users to upload the samples and train the model together.
Flask, Django is not designed for long time connection, and it is the same for the most other python framework we have to find a way to connect the web camera and system by hardware but not network to do the live stream AI Recognition.
Firstly, Training new classifiers with sufficient data to extend the posture recognition capabilities. Secondly, adding new human posture to it. Secondly, increasing the precision on the existing posture that can be recognised by the machine. Finally, it would be great to activate a pop-up notification functionality when there is a fighting behaviour.
When the OpenCV.js is open to self-implement faces library, we will replacing the back-end with the JavaScript commands
For the moment, it can only detect the top5 most significant items within the frame. It would be great to tweak the item recognition into instead of recognising all the items in a frame, finding dangerous items such as gun, knives would meet the expectation from Camden Council.


Goal
The goal of the game is to fill the whole grid with the numbers from 1 to 100.
Moves
Each turn you can move from the preceding number by jumping 2 tiles horizontally or vertically, or jumping 1 tile diagonally.
During all the game the tiles you can select are already highlighted.
If a tile is already filled, you can't refill it.
End of the game
The game ends when you have no more moves available.
Controls
Keyboard: Use the arrow keys to select the next move. To move diagonally use two arrow keys simultaneously.
Mouse: Click on the tile you want to move.


Edit an item¶
From the dashboard, click on Items in the menu on the left.
You should reach the item overview page, similar to this illustration :
Add a new item¶
Based on the illustration above, click on the “New Item” button on the top right area.
You should then reach the new item page, similar to the following illustration :
As you can see, there are multiple tabs “Item”, “Relationships”, “Taxonomy” and “Meta”. The tabs could vary according to your configuration.
Item¶
Allows you to edit your new item with the following options :
- Title, the title of your product or service
- Permalink, the unique link to this item, based on the title.
- Price, the price of the item. It’s a text field you can write whaterever you want (25, 25$, 25€, thenty-five dollars, …)
- Content, the description of the product. Like on twitter you have 140 characters to describe your item
- Affiliate link, the link to the affiliate page. If a user click on the item tile she will be redirected to this page
- Image, an illustration of your product. The default size is 400x300px. We recommand you to use an image editor to resize the picture if needed.
Relationships¶
This is where you can set the categories (location, price, period, …) of an item. You can set zero or more categories even of the same kind. As you type, suggestions will appear.
The item will be listed in every category that you have chosen.
Taxonomy¶
Edit the tags of an item.
Meta¶
Set a few parameters about the item such as :
- The status, if it is published or not
- The publication date, if you want to publish it automatically in the future
- The “depublication” date if you want to remove the item after a while
- The owner of the item
Edit an existing item¶
On the item overview page, click on the item to modify in the list. You will rech the edition page where you can edit the data. Please read the “Add a new item” section above to understand the meaning of the diffirent tabs and fields.
Note: when you click on “Save item”, if there is no error and the item is already published, the new data will be visible instantly.
Delete an item¶
On the item overview page, click on the checkbox of every item that you would like to delete, then on the bottom of the page click on the “Delete” button.
Beware : this will delete complitely and instantly, without option to get the data back.


A11YUI
Form
Full Name
Address Line 1
Address Line 2
City
State / Province / Region
Zip / Postal Code
Country
USA
China
USSR


Joseph Sheedy
<EMAIL_ADDRESS>Git repository: https://github.com/UWPCE-PythonCert/Python300-SystemDevelopmentWithPython-Fall-2014
Python is an evolving language. As of Python 2.2, we have old-style and new-style classes. The distinction disappears in Python 3.
New-style classes were introduced to unify user defined classes and built-in types.
This allows the extension of built-in types, for instance
To make a new-style class, derive from any other new-style class, or object
class C(object):
def __init__(self):
# new style class
pass
You almost always want new-style classes.
properties, super(), etc. do not work with old-style classes.
class ParentClass(object): pass
class MyClass(ParentClass):
def __init__(self):
super(MyClass, self).__init__()
super() returns a delegate object, which will delegate method calls to the appropriate class definition
It will return either a bound or unbound method depending on the parameters
super(type, obj) -> bound super object; requires isinstance(obj, type)
super(type) -> unbound super object
super(type, type2) -> bound super object; requires issubclass(type2, type)
In a class hierarchy, super() requires function signatures to match
If subclasses require different arguments, don't specify them explicitly but use variable length argument lists for all definitions, e.g.
def my_method(self, *args, **kwargs)
class Shape(object):
def __init__(self, shapename, **kwargs):
self.shapename = shapename
super(Shape, self).__init__(**kwargs)
class ColoredShape(Shape):
def __init__(self, color, **kwargs):
self.color = color
super(ColoredShape, self).__init__(**kwargs)
cs = ColoredShape(color='red', shapename='circle')
A class may be derived from multiple base classes
class Combined(Super1, Super2, Super3):
def __init__(self, *args, **kwargs):
Super1.__init__(self, *args, **kwargs)
Super2.__init__(self, *args, **kwargs)
Super3.__init__(self, *args, **kwargs)
When calling a method on an object, Python first checks to see if the method name is defined in the class. If not, it follows the Method Resolution Order (MRO) until it either finds it or reaches the top without locating it, which will result in an AttributeError exception being thrown.
The MRO algorithm
class A(object):
def my_method(self, arg):
print "called A"
class B(A):
def my_method(self, arg):
print "called B"
super(B, self).my_method(arg)
class C(A):
def my_method(self, arg):
print "called C"
super(C, self).my_method(arg)
class D(B, C):
def my_method(self, arg):
print "called D"
super(D, self).my_method(arg)
print D.mro()
The MRO algorithm guarantees consistency
But it can't successfully define an order for every configuration
See examples/invalid_mro.py
O = object
class X(O): pass
class Y(O): pass
class A(X,Y): pass
class B(Y,X): pass
class C(A,B): pass
The MRO of the previous diagram is [D,B,C,A], and is defined by the C3 linearization algorithm: http://en.wikipedia.org/wiki/C3_linearization
In the previous example, what will D.my_method() produce? Verify your answer with examples/mro.py
Classic classes maintain their original method resolution order, depth first and then left to right.
In simple cases, this will be a good approximation.
In general, children precede their parents and the order of appearance in __bases__ is respected.
See examples/logging_dict.py
Mixins are regular classes following the Mixin design pattern
They containing methods and properties with the intent of blending them into a new class definition.
class BaseClass(object):
x = 10
class Mixin1(object):
def method1(self):
print "called method1, x = %s" % self.x
class Mixin2(object):
def method2(self):
print "called method2, x = %s" % self.x
class MyClass(Mixin2, Mixin1, BaseClass):
pass
In examples/mixins.py, you will find a few Vehicle classes laid out in a hierarchy
The log() method is called on a couple of instances
Modify the class definition for Bike to mix in the log() method from LoggingMixin
Does the output change accordingly?
An object is initialized after creation by the __init__ method
class MyInt(int):
def __init__(self, d):
super(MyInt, self).__init__(d)
__new__ is called before an instance is created, and returns an instance. __init__ is called afterwards to initialize the object
Unlike __init__, __new__ is a static method, not an instance method
Called with the same arguments as __init__
Allows for immutable types, where data is set at construction time
Can return new or existing objects of any type
class MyClass(object):
def __init__(self, *args, **kwargs):
pass
def __new__(cls, *args, **kwargs):
print "creating new class %s" % cls
return super(MyClass,cls).__new__(cls, *args, **kwargs)
cls is the class object.
Unlike __init__, it needs to return a class instance – usually by directly calling the superclass __new__
subclassing an immutable type: It’s too late to change it once you get to __init__
When __init__ is not called, for instance when unpickling (examples/unpickle.py)
Here is a replacement for int which can only take new values between 0 and 255:
class ConstrainedInt(int):
def __new__(cls, value):
value = value % 256
self = int.__new__(cls, value)
return self
Our ConstrainedInt handles initialization for us, but doesn't handle modification of the value
Develop ConstrainedInt until it passes all tests in test_constrainedint.py
class ConstrainedInt(int):
"""keeps value between 0 and 255"""
def __new__(cls, value):
value = value % 256
self = int.__new__(cls, value)
return self
Objects get created from classes. So what is the class of a class?
The class of Class is a metaclass
The metaclass can be used to dynamically create a class
The metaclass, being a class, also has a metaclass
With one argument, type()
returns the type of the argument
With 3 arguments, type()
returns a new class
type? Type: type String Form: <type 'type'> Namespace: Python builtin Docstring: type(object) -> the object's type type(name, bases, dict) -> a new type name: string name of the class bases: tuple of the parent classes dict: dict containing attribute names and values
The class
keyword is syntactic sugar, we can get by without it by using type
class MyClass(object):
x = 1
OR
MyClass = type('MyClass', (), {'x': 1})
(object
is automatically a superclass)
type()
Just define a function with the correct signature and add it to the attr dictionary
def my_method(self):
print "called my_method, x = %s" % self.x
MyClass = type('MyClass',(), {'x': 1, 'my_method': my_method})
o = MyClass()
o.my_method()
type(type) Out[1]: type
class Foo(object):
__metaclass__ = MyMetaClass
Python will look for __metaclass__ in the class definition.
If it finds it, it will use it to create the object class Foo.
If it doesn't, it will use type to create the class.
__metaclass__ can be defined at the module level
Whatever is assigned to __metaclass__ should be a callable with the same signature as type()
Useful when creating an API or framework
Whenever you need to manage object creation for one or more classes
For example, see examples/singleton.py
Or consider the Django ORM:
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
person = Person(name='bob', age=35)
print person.name
When the Person class is created, it is dynamically modified to integrate with the database configured backend. Thus, different configurations will lead to different class definitions. This is abstracted from the user of the Model class.
Here is the Django Model metaclass: https://github.com/django/django/blob/master/django/db/models/base.py#L59
Consider wanting a metaclass which mangles all attribute names to provide uppercase and lower case attributes
class Foo(object):
__metaclass__ = NameMangler
x = 1
f = Foo()
print f.X
print f.x
class NameMangler(type):
def __new__(cls, clsname, bases, dct):
uppercase_attr = {}
for name, val in dct.items():
if not name.startswith('__'):
uppercase_attr[name.upper()] = val
uppercase_attr[name] = val
else:
uppercase_attr[name] = val
return super(NameMangler, cls).__new__(cls, clsname, bases, uppercase_attr)
class Foo(object):
__metaclass__ = NameMangler
x = 1
In the repository, find and run examples/mangler.py
Modify the NameMangler metaclass such that setting an attribute f.x also sets f.xx
Now create a new metaclass, MangledSingleton, composed of the NameMangler and Singleton classes in the examples/ directory. Assign it to the __metaclass__ attribute of a new class and verify that it works.
Your code should look like this:
class MyClass(object):
__metaclass__ = MangledSingleton # define this
x = 1
o1 = MyClass()
o2 = MyClass()
print o1.X
assert id(o1) == id(o2)
/


Feeds: {{results.feedCount}}
Subscribed: {{results.subscribedCount}}
Unsubscribed: {{results.unsubscribedCount}}
Pending: {{results.pendingCount}}
Feeds Added In Last Week: {{results.feedsAddedInLastWeek}}
Total Entries: {{results.entriesCount}}
Entries In Last Day: {{results.entriesInLastDay}}
Entries In Last Week: {{results.entriesInLastWeek}}
Users: {{results.usersCount}}
Subscriptions: {{results.subscriptionCount}}


Suganya
Projects
About me
Blog
Hire me
Facebook
Twitter
Linked in
Vanakkam!
am a webdeveloper.
Based out of bengaluru, I enjoy building websites.
am looking for freelance projects.


Are you tired of having to keep track of all of the recipes you found in various cookbooks, websites, from your friends, or even ones that you've made? With Recip-EZ, you can submit any sort of recipe you may have from your favorite, delectable desert to an ice-cold, soothing cocktail! In five easy steps, you can keep your recipes organized by meal or by the source as well as include a link, make your own comments, or even give it a rating!


Rubik's3 is meant to create a centralized community for speed cubers! We have created a user friendly interface that allows any member to create a competition. Each competition undergoes review by WCA delegates, who can contact you to discuss your competition.
Talk with your friends, or meet new cubers! This is a fast way to invite your friends to join your newly created competition
Log In with your WCA credentials
When you sign-up/sign-in, you can create as many competitions as you want. All competitions are reviewed by WCA delegates
You can customize the competition to include events you want! You can allow other users to volunteer and help organize events.
You can view all the competitions created, and narrow down your search to competitions in your area.


Cops release image of suspect taken by passerby after street robbery
The woman is said to have snatched a handbag from her as she walked along Douglas Road in Acocks Green. A passer-by managed to take a photograph of the suspect.
by birminghammail.co.ukPolice have released an image of a woman they want to trace in connection with an alleged street robbery.
A victim had her handbag snatched as she walked along Douglas Road in Acocks Green , at around 8am on Saturday, October 26.
A passer-by caught up with a suspect and managed to take a photograph before she fled.
West Midlands Police have now released an image of a woman they want to speak to in connection with the incident.
A statement on Birmingham Police website said: “A woman was robbed of her handbag as she walked along Douglas Road in the Acocks Green area of #Birmingham just after 8am on Saturday 26 October.
“This picture was taken after a passer-by caught up with the suspected thief, before she managed to get away.”
Enquiries continue and anyone with information is asked to contact us via Live Chat at www.west-midlands.police.uk between 8am and midnight, or call 101 anytime.
To remain anonymous please call Crimestoppers on 0800 555 111. Quote crime reference 20BE/253382V/19.


{{extend 'layout.html'}} {{block head}} {{end}}
{{=sanitize(q.QUOTE.Text)}}
Submitted by {{=q.auth_user.username}}
{{if q.QUOTE.Note:}}Note:{{pass}} {{=sanitize(q.QUOTE.Note)}}
{{=sanitize(q.AUTHOR_TR.DisplayName)}} {{=sanitize(q.WORK_TR.WorkName)}}
Pindar users have marked that this quote is linked to the following quotes—for instance, that the following quotes are influenced by it, allude to it, or talk about a similar theme.


How to create and install a pre-populated database
Using the Titanium.Database.install method allows you to install a database that is pre-populated and packaged with the application in the resources directory. When the Titanium.Database.install method is called, it will install that database, or if the database is already installed, it will simply open the database.
-
You can create a SQLite database in many ways - the easiest way might be to use the SQLite Manager plugin for Firefox:https://addons.mozilla.org/en-US/firefox/addon/5817https://addons.mozilla.org/en-US/firefox/addon/5817
This will allow you to create a new database, run SQL against it, and end up with a pre-populated database.
-
Place the resulting file in your resources folder and you will be able to use it with the install function:
var db = Titanium.Database.install('testdb.db','myDB');
This will install the testdb.db database as myDB.sql in the databases directory which is available using:
Ti.Filesystem.applicationSupportDirectory+'/database'.
From there you can now open that database using Ti.Database.open('myDB');
Always remember to close your database and result set when you are done accessing them.


How fragmented are your Domino Server Drives on Windows - Help needed!
Disk fragmentation has been discussed here more than once and defragmentation is part of the ideal Notes upgrade and the Upgrade Cheat Sheet. In a comment Nico57 points out that the disk allocation scheme of Domino is a huge contributor, especially when
The irony of compact: your inner structures in the NSF will be squeaky clean, but the content will be (after a while) splattered over your disk like pimples on a teenager's face. The least you can do is to point all temp locations at least onto a different partition. So I had a chat with the engineering team and they are interested to learn about the magnitude of the problem. So I need your help. We like to know how fragmented your NSF on your Windows servers really are. This is what I want you to do:
compact -c
is part of your database hygiene routines.
The irony of compact: your inner structures in the NSF will be squeaky clean, but the content will be (after a while) splattered over your disk like pimples on a teenager's face. The least you can do is to point all temp locations at least onto a different partition. So I had a chat with the engineering team and they are interested to learn about the magnitude of the problem. So I need your help. We like to know how fragmented your NSF on your Windows servers really are. This is what I want you to do:
- Download a copy of Sysinternals Contig.exe from Microsoft Technet and make it accessible from your Windows server (Copy it there, put it on a network drive you can reach, you know what you are doing)
- Open a command prompt on your server and type
[Wherever-contig-is]\contig -a -s [Path-to-Domino-data-directory]\*.nsf > fragmentation.txt
If you have database or directory links you have to repeat the process but then you need>> fragmentation.txt
. This will list out the files and their fragmentation. Don't forget the -a parameter that tells contig to list only and not to actually defrag - Find the database with the most fragments as well as the average number of fragments (that number is at the very end of a run). I would like to know these figures
- Head over to the Entry form and let me know. There are only 2 numeric values mandatory (and the selection of two dropdowns), the rest is strictly optional. Leave an eMail address if it is OK to contact you with a question or two.
- Leave a comment here (optional) if you have a question or would like to share special procedures or experiences.
Posted by Stephan H Wissel on 14 March 2011 | Comments (9) | categories: Show-N-Tell Thursday


|
ActiveTcl User Guide
|
||
source - Evaluate a file or resource as a Tcl script
source fileName
source -rsrc resourceName
?fileName?
source -rsrcid resourceId
?fileName?
This command takes the contents of the specified file or resource and passes it to the Tcl interpreter as a text script. The return value from source is the return value of the last command executed in the script. If an error occurs in evaluating the contents of the script then the source command will return that error. If a return command is invoked from within the script then the remainder of the file will be skipped and the source command will return normally with the result from the return command.
The end-of-file character for files is '\32' (^Z) for all platforms. The source command will read files up to this character. This restriction does not exist for the read or gets commands, allowing for files containing code and data segments (scripted documents). If you require a ``^Z'' in code for string comparison, you can use ``\032'' or ``\u001a'', which will be safely substituted by the Tcl interpreter into ``^Z''.
The -rsrc and -rsrcid forms of this command are only available on Macintosh computers. These versions of the command allow you to source a script from a TEXT resource. You may specify what TEXT resource to source by either name or id. By default Tcl searches all open resource files, which include the current application and any loaded C extensions. Alternatively, you may specify the fileName where the TEXT resource can be found.
Copyright © 1993 The Regents of the University of California. Copyright © 1994-1996 Sun Microsystems, Inc. Copyright © 2000 Scriptics Corporation. Copyright © 1995-1997 Roger E. Critchlow Jr.


« Main site
Sorry, your browser or graphics card doesn't support webgl. Most features of the simulation will not be available.
You may be able to see the simulation if you..


Ilmatar Web App
GitHub
Monitor
Monitor app
{% for script in monitorScripts %}
{{ script|capitalize }}
{% endfor %}
Control
Control
Control
Stop
App
{% for script in controlScripts %}
{{ script|capitalize }}
{% endfor %}
Unable to get control. Another client has control.


How advanced would we need the downloaded CSV to be? Should we be able to filter the results, then download the file? Or is it just one file that will be downloadable with all requests? @kevinreiss
Here is a quick way to generate a downloadable CSV file (via VSCode): spec > features > downloadcsvscript.rb
Here are some examples of the generated data:
creator,status,start_date,end_date,notes,request_type
"Mraz, Shanda (uid18692)",denied,2022-11-04,2022-11-05,#<Note::ActiveRecord_Associations_CollectionProxy:0x00007fe750268740>,AbsenceRequest
"Williamson, Felicita (uid395)",denied,2023-05-29,2023-06-01,#<Note::ActiveRecord_Associations_CollectionProxy:0x00007fe74d6b8460>,TravelRequest
"Williamson, Felicita (uid395)",denied,2023-10-23,2023-10-26,#<Note::ActiveRecord_Associations_CollectionProxy:0x00007fe74d6b1fe8>,TravelRequest
mentioned
by Kevin Reiss at 2022-09-30 20:17:53.subscribed
by Kevin Reiss at 2022-09-30 20:17:54.closed
by None at 2022-09-30 16:15:05.head_ref_force_pushed
by Christina Chortaria at 2022-09-30 14:21:06.Hey team! Please add your planning poker estimate with Zenhub @leefaisonr @maxkadel @sandbergja
mentioned
by Jane Sandberg at 2022-09-30 15:37:27.subscribed
by Jane Sandberg at 2022-09-30 15:37:27.mentioned
by Max Kadel at 2022-09-30 15:37:27.subscribed
by Max Kadel at 2022-09-30 15:37:27.mentioned
by Robert-Anthony Lee-Faison at 2022-09-30 15:37:27.subscribed
by Robert-Anthony Lee-Faison at 2022-09-30 15:37:27.head_ref_force_pushed
by Christina Chortaria at 2022-09-30 17:02:36.head_ref_force_pushed
by Christina Chortaria at 2022-09-30 18:56:26.deployed
by None at 2022-09-30 18:57:06.I believe this issue has already been resolved: https://github.com/pulibrary/figgy/blob/40dc3bd30a8ed4dc45905aa0a40b6b9abd907b0e/app/helpers/thumbnail_helper.rb#L35
assigned
by None at 2022-09-30 14:16:21.closed
by None at 2022-09-30 14:22:16.closed
by Trey Pendragon at 2022-09-30 17:40:42.head_ref_force_pushed
by Eliot Jordan at 2022-09-29 22:10:58.deployed
by None at 2022-09-29 22:11:22.convert_to_draft
by Eliot Jordan at 2022-09-30 14:14:52.head_ref_force_pushed
by Eliot Jordan at 2022-09-30 15:21:41.ready_for_review
by Eliot Jordan at 2022-09-30 15:22:09.referenced
by Trey Pendragon at 2022-09-30 17:40:41.merged
by Trey Pendragon at 2022-09-30 17:40:41.closed
by Trey Pendragon at 2022-09-30 17:40:41.head_ref_deleted
by Trey Pendragon at 2022-09-30 17:40:42.referenced
by Trey Pendragon at 2022-09-30 17:41:17.merged
by Trey Pendragon at 2022-09-30 17:41:17.closed
by Trey Pendragon at 2022-09-30 17:41:18.head_ref_deleted
by Trey Pendragon at 2022-09-30 17:41:18.closed
by Trey Pendragon at 2022-09-30 17:41:18.We accessed a database backup from earlier in the week. We sshed directly to the storage machine, rather than running grep over the mount, because the file was 120G.
LC_ALL=C grep -A 2000 roles_users [name of file]
(It wasn't roles_users in the end, it was a bit more of a string to make sure we got just the table)
Once we had the list of IDs, we put them into an array and ran the following in the rails console:
admin_role = Role.find_or_create_by(name: "admin")
admin_users.each do |user_id|
u = User.find(user_id)
next if u.roles.include? admin_role
puts "Making #{u} an admin"
u.roles << admin_role
u.save
end
closed
by None at 2022-09-30 20:32:25.Please add your planning poker estimate with Zenhub @sandbergja
Hey team! Please add your planning poker estimate with Zenhub @maxkadel @leefaisonr
mentioned
by Jane Sandberg at 2022-09-30 15:19:50.subscribed
by Jane Sandberg at 2022-09-30 15:19:50.mentioned
by Max Kadel at 2022-09-30 15:20:21.subscribed
by Max Kadel at 2022-09-30 15:20:21.mentioned
by Robert-Anthony Lee-Faison at 2022-09-30 15:20:21.subscribed
by Robert-Anthony Lee-Faison at 2022-09-30 15:20:21.Hey team! Please add your planning poker estimate with Zenhub @leefaisonr @maxkadel @sandbergja
mentioned
by Jane Sandberg at 2022-09-30 15:30:39.subscribed
by Jane Sandberg at 2022-09-30 15:30:39.mentioned
by Max Kadel at 2022-09-30 15:30:39.subscribed
by Max Kadel at 2022-09-30 15:30:39.mentioned
by Robert-Anthony Lee-Faison at 2022-09-30 15:30:39.subscribed
by Robert-Anthony Lee-Faison at 2022-09-30 15:30:39.Hey team! Please add your planning poker estimate with Zenhub @leefaisonr @maxkadel @sandbergja @rladdusaw @regineheberlein
mentioned
by None at 2022-09-30 15:48:19.subscribed
by None at 2022-09-30 15:48:19.mentioned
by Jane Sandberg at 2022-09-30 15:48:19.subscribed
by Jane Sandberg at 2022-09-30 15:48:19.mentioned
by None at 2022-09-30 15:48:19.subscribed
by None at 2022-09-30 15:48:19.mentioned
by Max Kadel at 2022-09-30 15:48:19.subscribed
by Max Kadel at 2022-09-30 15:48:19.mentioned
by Robert-Anthony Lee-Faison at 2022-09-30 15:48:20.subscribed
by Robert-Anthony Lee-Faison at 2022-09-30 15:48:20.@LynnDurgin @slogue Could you say a little more about why you feel that these issues should be handled on the display layer rather than in the data? I'd just like to understand better what you're trying to accomplish by keeping different display values in Alma from what we actually want to display.
My inclination would be to handle both on the data layer, but perhaps I'm missing something? Here's what I would suggest:
'arkLink' -- change to --> 'Princeton University Library Finding Aids' (this will be the title for the link)
The MARC coding for the link text is $y, which isn't present in the data right now. So we could 1. update the aspace2alma process to include it 2. create a set to update any records in Alma not updated by the aspace2alma process 3. create and run a job over that set 4. it looks like $y is already indexed and displays (but I haven't double-checked): https://github.com/pulibrary/bibdata/blob/main/marc_to_solr/lib/traject_config.rb#L378
'Finding aid online' --change to --> 'Search and request'
Orangelight pulls the display from the value in 856$z. Since that field is geared at patrons, changing it shouldn't affect staff, or does it? We could 1. update the aspace2alma process 2. create a set to update any records in Alma not updated by the aspace2alma process 3. create and run a job over that set
mentioned
by None at 2022-09-30 17:26:05.subscribed
by None at 2022-09-30 17:26:05.mentioned
by None at 2022-09-30 17:26:05.subscribed
by None at 2022-09-30 17:26:05.head_ref_force_pushed
by Jane Sandberg at 2022-09-29 23:31:42.head_ref_force_pushed
by Jane Sandberg at 2022-09-30 06:18:13.head_ref_force_pushed
by Jane Sandberg at 2022-09-30 06:20:30.head_ref_force_pushed
by Jane Sandberg at 2022-09-30 23:48:45.renamed
by Jane Sandberg at 2022-09-30 23:51:22.head_ref_force_pushed
by Jane Sandberg at 2022-10-01 00:10:09.referenced
by Hector Correa at 2022-09-30 12:42:29.merged
by Hector Correa at 2022-09-30 12:42:29.closed
by Hector Correa at 2022-09-30 12:42:29.head_ref_deleted
by Hector Correa at 2022-09-30 12:42:30.referenced
by Hector Correa at 2022-09-30 13:12:13.merged
by Hector Correa at 2022-09-30 13:12:13.closed
by Hector Correa at 2022-09-30 13:12:13.head_ref_deleted
by Hector Correa at 2022-09-30 13:12:13.closed
by Hector Correa at 2022-09-30 13:12:14.assigned
by None at 2022-09-30 14:33:45.referenced
by James R. Griffin III at 2022-09-30 17:07:08.merged
by James R. Griffin III at 2022-09-30 17:07:08.closed
by James R. Griffin III at 2022-09-30 17:07:08.head_ref_deleted
by James R. Griffin III at 2022-09-30 17:07:09.@carolyncole this test covers the Datacite XML generation and the fixture has been updated to account for the new field.
@hectorcorrea Totally missed that. Thank you!
convert_to_draft
by Hector Correa at 2022-09-30 15:42:44.ready_for_review
by Hector Correa at 2022-09-30 15:59:56.mentioned
by None at 2022-09-30 17:09:11.subscribed
by None at 2022-09-30 17:09:11.mentioned
by Hector Correa at 2022-09-30 17:21:53.subscribed
by Hector Correa at 2022-09-30 17:21:53.referenced
by None at 2022-09-30 17:22:13.merged
by None at 2022-09-30 17:22:13.closed
by None at 2022-09-30 17:22:14.head_ref_deleted
by None at 2022-09-30 17:22:14.closed
by None at 2022-09-30 17:22:14.The test coverage has regressed to 95.65% with https://output.circle-artifacts.com/output/job/fea71654-5010-4265-aa98-2a9e3afd300b/artifacts/0/coverage/index.html
reopened
by James R. Griffin III at 2022-09-30 19:44:05.closed
by James R. Griffin III at 2022-09-30 19:46:08.reopened
by James R. Griffin III at 2022-09-30 19:46:15.head_ref_force_pushed
by James R. Griffin III at 2022-09-30 15:01:48.renamed
by James R. Griffin III at 2022-09-30 15:33:50.head_ref_force_pushed
by James R. Griffin III at 2022-09-30 15:35:56.assigned
by James R. Griffin III at 2022-09-30 15:41:04.ready_for_review
by James R. Griffin III at 2022-09-30 15:41:17.convert_to_draft
by James R. Griffin III at 2022-09-30 15:54:35.head_ref_force_pushed
by James R. Griffin III at 2022-09-30 16:54:35.head_ref_force_pushed
by James R. Griffin III at 2022-09-30 17:05:06.head_ref_force_pushed
by James R. Griffin III at 2022-09-30 17:46:48.ready_for_review
by James R. Griffin III at 2022-09-30 17:52:05.review_requested
by James R. Griffin III at 2022-09-30 19:32:46.referenced
by None at 2022-09-30 20:01:56.merged
by None at 2022-09-30 20:01:56.closed
by None at 2022-09-30 20:01:56.head_ref_deleted
by None at 2022-09-30 20:01:57.head_ref_force_pushed
by None at 2022-09-30 17:35:21.head_ref_force_pushed
by None at 2022-09-30 19:59:13.head_ref_force_pushed
by None at 2022-09-30 20:02:34.ready_for_review
by None at 2022-09-30 20:48:45.convert_to_draft
by James R. Griffin III at 2022-09-30 17:08:08.head_ref_force_pushed
by James R. Griffin III at 2022-09-30 17:34:48.ready_for_review
by James R. Griffin III at 2022-09-30 17:42:26.referenced
by Hector Correa at 2022-09-30 17:46:51.merged
by Hector Correa at 2022-09-30 17:46:51.closed
by Hector Correa at 2022-09-30 17:46:51.head_ref_deleted
by Hector Correa at 2022-09-30 17:46:51.closed
by James R. Griffin III at 2022-09-30 18:04:38.Closed by #3206 and #3024. We now run apt-get update
from the OS update playbook during maintenance windows. The datadog role still has some cache_update: true
things set, but otherwise I think we have removed them. Planning to set the OS update playbook to run on a schedule in Tower.
closed
by Alicia Cozine at 2022-09-29 22:23:05.@kayiwa looks like something went slightly off with your rebase. This PR should not include Remove molecule mariadb role as that is already a part of main.
mentioned
by Francis Kayiwa at 2022-09-30 13:37:32.subscribed
by Francis Kayiwa at 2022-09-30 13:37:32.Failure is coming from the common
role:
TASK [common : common | install building software and build essentials] ********
fatal: [instance]: FAILED! => {"changed": false, "msg": "No package matching 'htop' is available"}
Update: we do need to run apt-get update
in testing, because the cache on our test image is stale. Adding this functionality as a pre-task in the molecule/default/converge.yml
files. See #3365.
Next failure is from the tests for the Drupal9 role, but it's an error in a handler marked php
:
RUNNING HANDLER [php : restart apache] *****************************************
fatal: [instance]: FAILED! => {"changed": false, "msg": "Output of config test was:\nenv: ‘apache2ctl’: No such file or directory\n"}
Update: this was caused by the PHP role installing nginx but then restarting apache2. Fixed by #3367.
ready_for_review
by Alicia Cozine at 2022-09-29 22:18:10.referenced
by Jane Sandberg at 2022-09-30 15:40:05.merged
by Jane Sandberg at 2022-09-30 15:40:05.closed
by Jane Sandberg at 2022-09-30 15:40:05.head_ref_deleted
by Jane Sandberg at 2022-09-30 15:40:05.mentioned
by Francis Kayiwa at 2022-09-30 17:06:45.subscribed
by Francis Kayiwa at 2022-09-30 17:06:45.referenced
by Francis Kayiwa at 2022-09-30 18:46:22.merged
by Francis Kayiwa at 2022-09-30 18:46:22.closed
by Francis Kayiwa at 2022-09-30 18:46:22.head_ref_deleted
by Francis Kayiwa at 2022-09-30 18:46:22.head_ref_force_pushed
by Christina Chortaria at 2022-09-30 20:49:55.head_ref_force_pushed
by Christina Chortaria at 2022-09-30 20:51:25.head_ref_force_pushed
by Christina Chortaria at 2022-09-30 20:56:00.assigned
by None at 2022-09-30 14:38:04.ready_for_review
by Trey Pendragon at 2022-09-30 20:22:27.referenced
by Trey Pendragon at 2022-09-30 20:26:02.merged
by Trey Pendragon at 2022-09-30 20:26:02.closed
by Trey Pendragon at 2022-09-30 20:26:02.head_ref_deleted
by Trey Pendragon at 2022-09-30 20:26:03.closed
by Trey Pendragon at 2022-09-30 20:26:03.assigned
by None at 2022-09-30 21:39:58.unassigned
by Eliot Jordan at 2022-09-30 19:19:50.closed
by Kate Lynch at 2022-09-30 14:09:43.head_ref_force_pushed
by Eliot Jordan at 2022-09-30 14:33:54.ready_for_review
by Eliot Jordan at 2022-09-30 15:19:45.referenced
by Eliot Jordan at 2022-09-30 15:19:50.merged
by Eliot Jordan at 2022-09-30 15:19:50.closed
by Eliot Jordan at 2022-09-30 15:19:50.head_ref_deleted
by Eliot Jordan at 2022-09-30 15:19:53.@eliotjordan why do we update this way instead of pulling commits directly?
@hackartisan We have customized the gem enough and were far behind the upstream enough that syncing was messy (rubocop being the primary cause). The better thing to do here is probably to submit a PR to the upstream gem to allow passing in a config file path.
@hackartisan I made an upstream PR: https://github.com/mrcsparker/ruby_tika_app/pull/17
Awesome!!
head_ref_force_pushed
by Eliot Jordan at 2022-09-29 22:00:39.ready_for_review
by Eliot Jordan at 2022-09-30 14:15:08.referenced
by Eliot Jordan at 2022-09-30 14:15:13.merged
by Eliot Jordan at 2022-09-30 14:15:13.closed
by Eliot Jordan at 2022-09-30 14:15:13.head_ref_deleted
by Eliot Jordan at 2022-09-30 14:15:16.mentioned
by Eliot Jordan at 2022-09-30 16:28:51.subscribed
by Eliot Jordan at 2022-09-30 16:28:51.mentioned
by None at 2022-09-30 16:41:08.subscribed
by None at 2022-09-30 16:41:08.mentioned
by None at 2022-09-30 18:26:52.subscribed
by None at 2022-09-30 18:26:52.